/*******************************************************************************
 * Copyright (c) 2011, 2021 Willink Transformations and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v2.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v20.html
 *
 * Contributors:
 *     E.D.Willink - initial API and implementation
 *******************************************************************************/
package org.eclipse.qvtd.xtext.qvtbase.serializer;

import com.google.inject.Inject;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.qvtd.xtext.qvtbase.services.QVTbaseGrammarAccess;
import org.eclipse.xtext.IGrammarAccess;
import org.eclipse.xtext.RuleCall;
import org.eclipse.xtext.nodemodel.INode;
import org.eclipse.xtext.serializer.analysis.GrammarAlias.AbstractElementAlias;
import org.eclipse.xtext.serializer.analysis.GrammarAlias.AlternativeAlias;
import org.eclipse.xtext.serializer.analysis.GrammarAlias.GroupAlias;
import org.eclipse.xtext.serializer.analysis.GrammarAlias.TokenAlias;
import org.eclipse.xtext.serializer.analysis.ISyntacticSequencerPDAProvider.ISynNavigable;
import org.eclipse.xtext.serializer.analysis.ISyntacticSequencerPDAProvider.ISynTransition;
import org.eclipse.xtext.serializer.sequencer.AbstractSyntacticSequencer;

@SuppressWarnings("all")
public abstract class AbstractQVTbaseSyntacticSequencer extends AbstractSyntacticSequencer {

	protected QVTbaseGrammarAccess grammarAccess;
	protected AbstractElementAlias match_AttributeCS_CommaKeyword_5_1_1_q;
	protected AbstractElementAlias match_AttributeCS_SemicolonKeyword_6_1_or___LeftCurlyBracketKeyword_6_0_0_____DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4___or___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4____a_RightCurlyBracketKeyword_6_0_2__;
	protected AbstractElementAlias match_AttributeCS_UnrestrictedNameParserRuleCall_6_0_1_0_1_q;
	protected AbstractElementAlias match_AttributeCS_UnrestrictedNameParserRuleCall_6_0_1_1_1_q;
	protected AbstractElementAlias match_AttributeCS___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4__a__a;
	protected AbstractElementAlias match_AttributeCS___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__a;
	protected AbstractElementAlias match_AttributeCS___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2___SemicolonKeyword_6_0_1_1_4_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a___or_____DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2___SemicolonKeyword_6_0_1_1_4_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a_SemicolonKeyword_6_0_1_1_4__q___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4__p_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2___SemicolonKeyword_6_0_1_1_4_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a___SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4__p_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2___SemicolonKeyword_6_0_1_1_4_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a__a__;
	protected AbstractElementAlias match_AttributeCS___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__a__a;
	protected AbstractElementAlias match_AttributeCS___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4__a;
	protected AbstractElementAlias match_AttributeCS___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2___SemicolonKeyword_6_0_1_0_4_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2__a___or_____InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2___SemicolonKeyword_6_0_1_0_4_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2__a_SemicolonKeyword_6_0_1_0_4__q___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__p_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2___SemicolonKeyword_6_0_1_0_4_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2__a___SemicolonKeyword_6_0_1_0_4___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__p_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2___SemicolonKeyword_6_0_1_0_4_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2__a__a__;
	protected AbstractElementAlias match_AttributeCS___SemicolonKeyword_6_0_1_0_4___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__a_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2__a;
	protected AbstractElementAlias match_AttributeCS___SemicolonKeyword_6_0_1_0_4___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__a_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2__p;
	protected AbstractElementAlias match_AttributeCS___SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4__a_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a;
	protected AbstractElementAlias match_AttributeCS___SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4__a_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__p;
	protected AbstractElementAlias match_CompoundTargetElementCS_SemicolonKeyword_3_q;
	protected AbstractElementAlias match_DataTypeCS_SemicolonKeyword_6_1_or___LeftCurlyBracketKeyword_6_0_0_RightCurlyBracketKeyword_6_0_1__;
	protected AbstractElementAlias match_DataTypeCS___LeftCurlyBracketKeyword_5_0_SerializableKeyword_5_1_1_q_RightCurlyBracketKeyword_5_2__q;
	protected AbstractElementAlias match_EnumerationCS_SemicolonKeyword_5_1_or___LeftCurlyBracketKeyword_5_0_0_RightCurlyBracketKeyword_5_0_2__;
	protected AbstractElementAlias match_EnumerationCS___LeftCurlyBracketKeyword_4_0_SerializableKeyword_4_1_1_q_RightCurlyBracketKeyword_4_2__q;
	protected AbstractElementAlias match_EnumerationLiteralCS_SemicolonKeyword_2_1_or___LeftCurlyBracketKeyword_2_0_0_RightCurlyBracketKeyword_2_0_1__;
	protected AbstractElementAlias match_MultiplicityCS_VerticalLineQuestionMarkKeyword_2_0_q;
	protected AbstractElementAlias match_OperationCS_CommaKeyword_9_1_1_q;
	protected AbstractElementAlias match_OperationCS_SemicolonKeyword_10_1_or___LeftCurlyBracketKeyword_10_0_0___BodyKeyword_10_0_1_0_UnrestrictedNameParserRuleCall_10_0_1_1_q_ColonKeyword_10_0_1_2_SemicolonKeyword_10_0_1_4__a_RightCurlyBracketKeyword_10_0_2__;
	protected AbstractElementAlias match_OperationCS_UnrestrictedNameParserRuleCall_10_0_1_1_q;
	protected AbstractElementAlias match_OperationCS___BodyKeyword_10_0_1_0_UnrestrictedNameParserRuleCall_10_0_1_1_q_ColonKeyword_10_0_1_2_SemicolonKeyword_10_0_1_4__a;
	protected AbstractElementAlias match_OperationCS___SemicolonKeyword_10_0_1_4_BodyKeyword_10_0_1_0_UnrestrictedNameParserRuleCall_10_0_1_1_q_ColonKeyword_10_0_1_2__a;
	protected AbstractElementAlias match_OperationCS___SemicolonKeyword_10_0_1_4_BodyKeyword_10_0_1_0_UnrestrictedNameParserRuleCall_10_0_1_1_q_ColonKeyword_10_0_1_2__p;
	protected AbstractElementAlias match_ParameterCS_CommaKeyword_2_1_1_q;
	protected AbstractElementAlias match_ParameterCS___LeftCurlyBracketKeyword_3_0_RightCurlyBracketKeyword_3_1__q;
	protected AbstractElementAlias match_ReferenceCS_CommaKeyword_6_1_1_q;
	protected AbstractElementAlias match_ReferenceCS_SemicolonKeyword_7_1_or___LeftCurlyBracketKeyword_7_0_0_____DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4___or___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4____a_RightCurlyBracketKeyword_7_0_2__;
	protected AbstractElementAlias match_ReferenceCS_UnrestrictedNameParserRuleCall_7_0_1_0_1_q;
	protected AbstractElementAlias match_ReferenceCS_UnrestrictedNameParserRuleCall_7_0_1_1_1_q;
	protected AbstractElementAlias match_ReferenceCS___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4__a__a;
	protected AbstractElementAlias match_ReferenceCS___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4__a;
	protected AbstractElementAlias match_ReferenceCS___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2___SemicolonKeyword_7_0_1_1_4_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2__a___or_____DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2___SemicolonKeyword_7_0_1_1_4_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2__a_SemicolonKeyword_7_0_1_1_4__q___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4__p_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2___SemicolonKeyword_7_0_1_1_4_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2__a___SemicolonKeyword_7_0_1_1_4___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4__p_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2___SemicolonKeyword_7_0_1_1_4_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2__a__a__;
	protected AbstractElementAlias match_ReferenceCS___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4__a__a;
	protected AbstractElementAlias match_ReferenceCS___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4__a;
	protected AbstractElementAlias match_ReferenceCS___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2___SemicolonKeyword_7_0_1_0_4_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2__a___or_____InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2___SemicolonKeyword_7_0_1_0_4_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2__a_SemicolonKeyword_7_0_1_0_4__q___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4__p_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2___SemicolonKeyword_7_0_1_0_4_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2__a___SemicolonKeyword_7_0_1_0_4___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4__p_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2___SemicolonKeyword_7_0_1_0_4_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2__a__a__;
	protected AbstractElementAlias match_ReferenceCS___SemicolonKeyword_7_0_1_0_4___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4__a_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2__a;
	protected AbstractElementAlias match_ReferenceCS___SemicolonKeyword_7_0_1_0_4___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4__a_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2__p;
	protected AbstractElementAlias match_ReferenceCS___SemicolonKeyword_7_0_1_1_4___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4__a_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2__a;
	protected AbstractElementAlias match_ReferenceCS___SemicolonKeyword_7_0_1_1_4___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4__a_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2__p;
	protected AbstractElementAlias match_SimpleTargetElementCS___IteratesKeyword_2_0_LeftCurlyBracketKeyword_2_1_1_0_RightCurlyBracketKeyword_2_1_1_2__q;
	protected AbstractElementAlias match_StructuredClassCS_SemicolonKeyword_7_1_or___LeftCurlyBracketKeyword_7_0_0_RightCurlyBracketKeyword_7_0_2__;
	protected AbstractElementAlias match_StructuredClassCS___LeftCurlyBracketKeyword_6_0_RightCurlyBracketKeyword_6_2__q;
	protected AbstractElementAlias match_TargetCS_SemicolonKeyword_5_q;
	protected AbstractElementAlias match_TupleTypeCS___LeftParenthesisKeyword_1_0_RightParenthesisKeyword_1_2__q;

	@Inject
	protected void init(IGrammarAccess access) {
		grammarAccess = (QVTbaseGrammarAccess) access;
		match_AttributeCS_CommaKeyword_5_1_1_q = new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getCommaKeyword_5_1_1());
		match_AttributeCS_SemicolonKeyword_6_1_or___LeftCurlyBracketKeyword_6_0_0_____DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4___or___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4____a_RightCurlyBracketKeyword_6_0_2__ = new AlternativeAlias(false, false, new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getLeftCurlyBracketKeyword_6_0_0()), new AlternativeAlias(true, true, new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4())), new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_0_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_0_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_0_2()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_0_4()))), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getRightCurlyBracketKeyword_6_0_2())), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_1()));
		match_AttributeCS_UnrestrictedNameParserRuleCall_6_0_1_0_1_q = new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_0_1());
		match_AttributeCS_UnrestrictedNameParserRuleCall_6_0_1_1_1_q = new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1());
		match_AttributeCS___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4__a__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_0_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_0_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_0_2()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_0_4())));
		match_AttributeCS___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4()));
		match_AttributeCS___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2___SemicolonKeyword_6_0_1_1_4_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a___or_____DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2___SemicolonKeyword_6_0_1_1_4_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a_SemicolonKeyword_6_0_1_1_4__q___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4__p_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2___SemicolonKeyword_6_0_1_1_4_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a___SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4__p_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2___SemicolonKeyword_6_0_1_1_4_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a__a__ = new AlternativeAlias(false, false, new GroupAlias(false, false, new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2())), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4())), new GroupAlias(true, false, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_0_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_0_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_0_2()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_0_4())), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4()), new GroupAlias(true, false, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_0_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_0_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_0_2()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_0_4())), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2())))), new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2()))));
		match_AttributeCS___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__a__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_0_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_0_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_0_2()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_0_4()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4())));
		match_AttributeCS___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_0_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_0_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_0_2()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_0_4()));
		match_AttributeCS___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2___SemicolonKeyword_6_0_1_0_4_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2__a___or_____InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2___SemicolonKeyword_6_0_1_0_4_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2__a_SemicolonKeyword_6_0_1_0_4__q___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__p_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2___SemicolonKeyword_6_0_1_0_4_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2__a___SemicolonKeyword_6_0_1_0_4___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__p_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2___SemicolonKeyword_6_0_1_0_4_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2__a__a__ = new AlternativeAlias(false, false, new GroupAlias(false, false, new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_0_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_0_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_0_2()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_0_4()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_0_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_0_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_0_2())), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_0_4())), new GroupAlias(true, false, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4())), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_0_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_0_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_0_2()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_0_4()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_0_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_0_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_0_2())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_0_4()), new GroupAlias(true, false, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4())), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_0_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_0_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_0_2()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_0_4()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_0_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_0_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_0_2())))), new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_0_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_0_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_0_2()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_0_4()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_0_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_0_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_0_2()))));
		match_AttributeCS___SemicolonKeyword_6_0_1_0_4___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__a_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_0_4()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4())), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_0_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_0_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_0_2()));
		match_AttributeCS___SemicolonKeyword_6_0_1_0_4___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__a_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2__p = new GroupAlias(true, false, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_0_4()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4())), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_0_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_0_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_0_2()));
		match_AttributeCS___SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4__a_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_0_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_0_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_0_2()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_0_4())), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2()));
		match_AttributeCS___SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4__a_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__p = new GroupAlias(true, false, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_1_4()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getInitialKeyword_6_0_1_0_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_0_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_0_2()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getSemicolonKeyword_6_0_1_0_4())), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getDerivationKeyword_6_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getAttributeCSAccess().getUnrestrictedNameParserRuleCall_6_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getAttributeCSAccess().getColonKeyword_6_0_1_1_2()));
		match_CompoundTargetElementCS_SemicolonKeyword_3_q = new TokenAlias(false, true, grammarAccess.getCompoundTargetElementCSAccess().getSemicolonKeyword_3());
		match_DataTypeCS_SemicolonKeyword_6_1_or___LeftCurlyBracketKeyword_6_0_0_RightCurlyBracketKeyword_6_0_1__ = new AlternativeAlias(false, false, new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getDataTypeCSAccess().getLeftCurlyBracketKeyword_6_0_0()), new TokenAlias(false, false, grammarAccess.getDataTypeCSAccess().getRightCurlyBracketKeyword_6_0_1())), new TokenAlias(false, false, grammarAccess.getDataTypeCSAccess().getSemicolonKeyword_6_1()));
		match_DataTypeCS___LeftCurlyBracketKeyword_5_0_SerializableKeyword_5_1_1_q_RightCurlyBracketKeyword_5_2__q = new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getDataTypeCSAccess().getLeftCurlyBracketKeyword_5_0()), new TokenAlias(false, true, grammarAccess.getDataTypeCSAccess().getSerializableKeyword_5_1_1()), new TokenAlias(false, false, grammarAccess.getDataTypeCSAccess().getRightCurlyBracketKeyword_5_2()));
		match_EnumerationCS_SemicolonKeyword_5_1_or___LeftCurlyBracketKeyword_5_0_0_RightCurlyBracketKeyword_5_0_2__ = new AlternativeAlias(false, false, new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getEnumerationCSAccess().getLeftCurlyBracketKeyword_5_0_0()), new TokenAlias(false, false, grammarAccess.getEnumerationCSAccess().getRightCurlyBracketKeyword_5_0_2())), new TokenAlias(false, false, grammarAccess.getEnumerationCSAccess().getSemicolonKeyword_5_1()));
		match_EnumerationCS___LeftCurlyBracketKeyword_4_0_SerializableKeyword_4_1_1_q_RightCurlyBracketKeyword_4_2__q = new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getEnumerationCSAccess().getLeftCurlyBracketKeyword_4_0()), new TokenAlias(false, true, grammarAccess.getEnumerationCSAccess().getSerializableKeyword_4_1_1()), new TokenAlias(false, false, grammarAccess.getEnumerationCSAccess().getRightCurlyBracketKeyword_4_2()));
		match_EnumerationLiteralCS_SemicolonKeyword_2_1_or___LeftCurlyBracketKeyword_2_0_0_RightCurlyBracketKeyword_2_0_1__ = new AlternativeAlias(false, false, new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getEnumerationLiteralCSAccess().getLeftCurlyBracketKeyword_2_0_0()), new TokenAlias(false, false, grammarAccess.getEnumerationLiteralCSAccess().getRightCurlyBracketKeyword_2_0_1())), new TokenAlias(false, false, grammarAccess.getEnumerationLiteralCSAccess().getSemicolonKeyword_2_1()));
		match_MultiplicityCS_VerticalLineQuestionMarkKeyword_2_0_q = new TokenAlias(false, true, grammarAccess.getMultiplicityCSAccess().getVerticalLineQuestionMarkKeyword_2_0());
		match_OperationCS_CommaKeyword_9_1_1_q = new TokenAlias(false, true, grammarAccess.getOperationCSAccess().getCommaKeyword_9_1_1());
		match_OperationCS_SemicolonKeyword_10_1_or___LeftCurlyBracketKeyword_10_0_0___BodyKeyword_10_0_1_0_UnrestrictedNameParserRuleCall_10_0_1_1_q_ColonKeyword_10_0_1_2_SemicolonKeyword_10_0_1_4__a_RightCurlyBracketKeyword_10_0_2__ = new AlternativeAlias(false, false, new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getLeftCurlyBracketKeyword_10_0_0()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getBodyKeyword_10_0_1_0()), new TokenAlias(false, true, grammarAccess.getOperationCSAccess().getUnrestrictedNameParserRuleCall_10_0_1_1()), new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getColonKeyword_10_0_1_2()), new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getSemicolonKeyword_10_0_1_4())), new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getRightCurlyBracketKeyword_10_0_2())), new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getSemicolonKeyword_10_1()));
		match_OperationCS_UnrestrictedNameParserRuleCall_10_0_1_1_q = new TokenAlias(false, true, grammarAccess.getOperationCSAccess().getUnrestrictedNameParserRuleCall_10_0_1_1());
		match_OperationCS___BodyKeyword_10_0_1_0_UnrestrictedNameParserRuleCall_10_0_1_1_q_ColonKeyword_10_0_1_2_SemicolonKeyword_10_0_1_4__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getBodyKeyword_10_0_1_0()), new TokenAlias(false, true, grammarAccess.getOperationCSAccess().getUnrestrictedNameParserRuleCall_10_0_1_1()), new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getColonKeyword_10_0_1_2()), new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getSemicolonKeyword_10_0_1_4()));
		match_OperationCS___SemicolonKeyword_10_0_1_4_BodyKeyword_10_0_1_0_UnrestrictedNameParserRuleCall_10_0_1_1_q_ColonKeyword_10_0_1_2__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getSemicolonKeyword_10_0_1_4()), new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getBodyKeyword_10_0_1_0()), new TokenAlias(false, true, grammarAccess.getOperationCSAccess().getUnrestrictedNameParserRuleCall_10_0_1_1()), new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getColonKeyword_10_0_1_2()));
		match_OperationCS___SemicolonKeyword_10_0_1_4_BodyKeyword_10_0_1_0_UnrestrictedNameParserRuleCall_10_0_1_1_q_ColonKeyword_10_0_1_2__p = new GroupAlias(true, false, new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getSemicolonKeyword_10_0_1_4()), new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getBodyKeyword_10_0_1_0()), new TokenAlias(false, true, grammarAccess.getOperationCSAccess().getUnrestrictedNameParserRuleCall_10_0_1_1()), new TokenAlias(false, false, grammarAccess.getOperationCSAccess().getColonKeyword_10_0_1_2()));
		match_ParameterCS_CommaKeyword_2_1_1_q = new TokenAlias(false, true, grammarAccess.getParameterCSAccess().getCommaKeyword_2_1_1());
		match_ParameterCS___LeftCurlyBracketKeyword_3_0_RightCurlyBracketKeyword_3_1__q = new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getParameterCSAccess().getLeftCurlyBracketKeyword_3_0()), new TokenAlias(false, false, grammarAccess.getParameterCSAccess().getRightCurlyBracketKeyword_3_1()));
		match_ReferenceCS_CommaKeyword_6_1_1_q = new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getCommaKeyword_6_1_1());
		match_ReferenceCS_SemicolonKeyword_7_1_or___LeftCurlyBracketKeyword_7_0_0_____DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4___or___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4____a_RightCurlyBracketKeyword_7_0_2__ = new AlternativeAlias(false, false, new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getLeftCurlyBracketKeyword_7_0_0()), new AlternativeAlias(true, true, new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_1_2()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_1_4())), new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_0_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_0_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_0_2()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_0_4()))), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getRightCurlyBracketKeyword_7_0_2())), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_1()));
		match_ReferenceCS_UnrestrictedNameParserRuleCall_7_0_1_0_1_q = new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_0_1());
		match_ReferenceCS_UnrestrictedNameParserRuleCall_7_0_1_1_1_q = new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_1_1());
		match_ReferenceCS___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4__a__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_1_2()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_1_4()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_0_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_0_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_0_2()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_0_4())));
		match_ReferenceCS___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_1_2()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_1_4()));
		match_ReferenceCS___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2___SemicolonKeyword_7_0_1_1_4_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2__a___or_____DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2___SemicolonKeyword_7_0_1_1_4_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2__a_SemicolonKeyword_7_0_1_1_4__q___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4__p_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2___SemicolonKeyword_7_0_1_1_4_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2__a___SemicolonKeyword_7_0_1_1_4___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4__p_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2___SemicolonKeyword_7_0_1_1_4_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2__a__a__ = new AlternativeAlias(false, false, new GroupAlias(false, false, new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_1_2()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_1_4()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_1_2())), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_1_4())), new GroupAlias(true, false, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_0_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_0_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_0_2()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_0_4())), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_1_2()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_1_4()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_1_2())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_1_4()), new GroupAlias(true, false, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_0_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_0_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_0_2()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_0_4())), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_1_2()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_1_4()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_1_2())))), new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_1_2()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_1_4()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_1_2()))));
		match_ReferenceCS___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4__a__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_0_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_0_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_0_2()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_0_4()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_1_2()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_1_4())));
		match_ReferenceCS___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_0_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_0_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_0_2()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_0_4()));
		match_ReferenceCS___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2___SemicolonKeyword_7_0_1_0_4_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2__a___or_____InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2___SemicolonKeyword_7_0_1_0_4_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2__a_SemicolonKeyword_7_0_1_0_4__q___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4__p_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2___SemicolonKeyword_7_0_1_0_4_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2__a___SemicolonKeyword_7_0_1_0_4___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4__p_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2___SemicolonKeyword_7_0_1_0_4_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2__a__a__ = new AlternativeAlias(false, false, new GroupAlias(false, false, new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_0_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_0_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_0_2()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_0_4()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_0_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_0_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_0_2())), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_0_4())), new GroupAlias(true, false, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_1_2()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_1_4())), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_0_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_0_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_0_2()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_0_4()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_0_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_0_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_0_2())), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_0_4()), new GroupAlias(true, false, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_1_2()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_1_4())), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_0_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_0_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_0_2()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_0_4()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_0_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_0_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_0_2())))), new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_0_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_0_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_0_2()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_0_4()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_0_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_0_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_0_2()))));
		match_ReferenceCS___SemicolonKeyword_7_0_1_0_4___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4__a_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_0_4()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_1_2()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_1_4())), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_0_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_0_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_0_2()));
		match_ReferenceCS___SemicolonKeyword_7_0_1_0_4___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4__a_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2__p = new GroupAlias(true, false, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_0_4()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_1_2()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_1_4())), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_0_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_0_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_0_2()));
		match_ReferenceCS___SemicolonKeyword_7_0_1_1_4___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4__a_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2__a = new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_1_4()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_0_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_0_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_0_2()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_0_4())), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_1_2()));
		match_ReferenceCS___SemicolonKeyword_7_0_1_1_4___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4__a_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2__p = new GroupAlias(true, false, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_1_4()), new GroupAlias(true, true, new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getInitialKeyword_7_0_1_0_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_0_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_0_2()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getSemicolonKeyword_7_0_1_0_4())), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getDerivationKeyword_7_0_1_1_0()), new TokenAlias(false, true, grammarAccess.getReferenceCSAccess().getUnrestrictedNameParserRuleCall_7_0_1_1_1()), new TokenAlias(false, false, grammarAccess.getReferenceCSAccess().getColonKeyword_7_0_1_1_2()));
		match_SimpleTargetElementCS___IteratesKeyword_2_0_LeftCurlyBracketKeyword_2_1_1_0_RightCurlyBracketKeyword_2_1_1_2__q = new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getSimpleTargetElementCSAccess().getIteratesKeyword_2_0()), new TokenAlias(false, false, grammarAccess.getSimpleTargetElementCSAccess().getLeftCurlyBracketKeyword_2_1_1_0()), new TokenAlias(false, false, grammarAccess.getSimpleTargetElementCSAccess().getRightCurlyBracketKeyword_2_1_1_2()));
		match_StructuredClassCS_SemicolonKeyword_7_1_or___LeftCurlyBracketKeyword_7_0_0_RightCurlyBracketKeyword_7_0_2__ = new AlternativeAlias(false, false, new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getStructuredClassCSAccess().getLeftCurlyBracketKeyword_7_0_0()), new TokenAlias(false, false, grammarAccess.getStructuredClassCSAccess().getRightCurlyBracketKeyword_7_0_2())), new TokenAlias(false, false, grammarAccess.getStructuredClassCSAccess().getSemicolonKeyword_7_1()));
		match_StructuredClassCS___LeftCurlyBracketKeyword_6_0_RightCurlyBracketKeyword_6_2__q = new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getStructuredClassCSAccess().getLeftCurlyBracketKeyword_6_0()), new TokenAlias(false, false, grammarAccess.getStructuredClassCSAccess().getRightCurlyBracketKeyword_6_2()));
		match_TargetCS_SemicolonKeyword_5_q = new TokenAlias(false, true, grammarAccess.getTargetCSAccess().getSemicolonKeyword_5());
		match_TupleTypeCS___LeftParenthesisKeyword_1_0_RightParenthesisKeyword_1_2__q = new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getTupleTypeCSAccess().getLeftParenthesisKeyword_1_0()), new TokenAlias(false, false, grammarAccess.getTupleTypeCSAccess().getRightParenthesisKeyword_1_2()));
	}

	@Override
	protected String getUnassignedRuleCallToken(EObject semanticObject, RuleCall ruleCall, INode node) {
		if (ruleCall.getRule() == grammarAccess.getUnrestrictedNameRule())
			return getUnrestrictedNameToken(semanticObject, ruleCall, node);
		return "";
	}

	/**
	 * @Override
	 * UnrestrictedName returns ecore::EString: 	EssentialOCLUnrestrictedName;
	 */
	protected String getUnrestrictedNameToken(EObject semanticObject, RuleCall ruleCall, INode node) {
		if (node != null)
			return getTokenText(node);
		return "";
	}

	@Override
	protected void emitUnassignedTokens(EObject semanticObject, ISynTransition transition, INode fromNode, INode toNode) {
		if (transition.getAmbiguousSyntaxes().isEmpty()) return;
		List<INode> transitionNodes = collectNodes(fromNode, toNode);
		for (AbstractElementAlias syntax : transition.getAmbiguousSyntaxes()) {
			List<INode> syntaxNodes = getNodesFor(transitionNodes, syntax);
			if (match_AttributeCS_CommaKeyword_5_1_1_q.equals(syntax))
				emit_AttributeCS_CommaKeyword_5_1_1_q(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_AttributeCS_SemicolonKeyword_6_1_or___LeftCurlyBracketKeyword_6_0_0_____DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4___or___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4____a_RightCurlyBracketKeyword_6_0_2__.equals(syntax))
				emit_AttributeCS_SemicolonKeyword_6_1_or___LeftCurlyBracketKeyword_6_0_0_____DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4___or___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4____a_RightCurlyBracketKeyword_6_0_2__(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_AttributeCS_UnrestrictedNameParserRuleCall_6_0_1_0_1_q.equals(syntax))
				emit_AttributeCS_UnrestrictedNameParserRuleCall_6_0_1_0_1_q(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_AttributeCS_UnrestrictedNameParserRuleCall_6_0_1_1_1_q.equals(syntax))
				emit_AttributeCS_UnrestrictedNameParserRuleCall_6_0_1_1_1_q(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_AttributeCS___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4__a__a.equals(syntax))
				emit_AttributeCS___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4__a__a(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_AttributeCS___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__a.equals(syntax))
				emit_AttributeCS___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__a(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_AttributeCS___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2___SemicolonKeyword_6_0_1_1_4_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a___or_____DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2___SemicolonKeyword_6_0_1_1_4_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a_SemicolonKeyword_6_0_1_1_4__q___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4__p_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2___SemicolonKeyword_6_0_1_1_4_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a___SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4__p_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2___SemicolonKeyword_6_0_1_1_4_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a__a__.equals(syntax))
				emit_AttributeCS___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2___SemicolonKeyword_6_0_1_1_4_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a___or_____DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2___SemicolonKeyword_6_0_1_1_4_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a_SemicolonKeyword_6_0_1_1_4__q___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4__p_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2___SemicolonKeyword_6_0_1_1_4_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a___SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4__p_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2___SemicolonKeyword_6_0_1_1_4_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a__a__(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_AttributeCS___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__a__a.equals(syntax))
				emit_AttributeCS___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__a__a(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_AttributeCS___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4__a.equals(syntax))
				emit_AttributeCS___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4__a(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_AttributeCS___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2___SemicolonKeyword_6_0_1_0_4_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2__a___or_____InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2___SemicolonKeyword_6_0_1_0_4_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2__a_SemicolonKeyword_6_0_1_0_4__q___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__p_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2___SemicolonKeyword_6_0_1_0_4_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2__a___SemicolonKeyword_6_0_1_0_4___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__p_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2___SemicolonKeyword_6_0_1_0_4_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2__a__a__.equals(syntax))
				emit_AttributeCS___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2___SemicolonKeyword_6_0_1_0_4_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2__a___or_____InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2___SemicolonKeyword_6_0_1_0_4_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2__a_SemicolonKeyword_6_0_1_0_4__q___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__p_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2___SemicolonKeyword_6_0_1_0_4_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2__a___SemicolonKeyword_6_0_1_0_4___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__p_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2___SemicolonKeyword_6_0_1_0_4_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2__a__a__(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_AttributeCS___SemicolonKeyword_6_0_1_0_4___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__a_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2__a.equals(syntax))
				emit_AttributeCS___SemicolonKeyword_6_0_1_0_4___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__a_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2__a(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_AttributeCS___SemicolonKeyword_6_0_1_0_4___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__a_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2__p.equals(syntax))
				emit_AttributeCS___SemicolonKeyword_6_0_1_0_4___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__a_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2__p(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_AttributeCS___SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4__a_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a.equals(syntax))
				emit_AttributeCS___SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4__a_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_AttributeCS___SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4__a_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__p.equals(syntax))
				emit_AttributeCS___SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4__a_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__p(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_CompoundTargetElementCS_SemicolonKeyword_3_q.equals(syntax))
				emit_CompoundTargetElementCS_SemicolonKeyword_3_q(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_DataTypeCS_SemicolonKeyword_6_1_or___LeftCurlyBracketKeyword_6_0_0_RightCurlyBracketKeyword_6_0_1__.equals(syntax))
				emit_DataTypeCS_SemicolonKeyword_6_1_or___LeftCurlyBracketKeyword_6_0_0_RightCurlyBracketKeyword_6_0_1__(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_DataTypeCS___LeftCurlyBracketKeyword_5_0_SerializableKeyword_5_1_1_q_RightCurlyBracketKeyword_5_2__q.equals(syntax))
				emit_DataTypeCS___LeftCurlyBracketKeyword_5_0_SerializableKeyword_5_1_1_q_RightCurlyBracketKeyword_5_2__q(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_EnumerationCS_SemicolonKeyword_5_1_or___LeftCurlyBracketKeyword_5_0_0_RightCurlyBracketKeyword_5_0_2__.equals(syntax))
				emit_EnumerationCS_SemicolonKeyword_5_1_or___LeftCurlyBracketKeyword_5_0_0_RightCurlyBracketKeyword_5_0_2__(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_EnumerationCS___LeftCurlyBracketKeyword_4_0_SerializableKeyword_4_1_1_q_RightCurlyBracketKeyword_4_2__q.equals(syntax))
				emit_EnumerationCS___LeftCurlyBracketKeyword_4_0_SerializableKeyword_4_1_1_q_RightCurlyBracketKeyword_4_2__q(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_EnumerationLiteralCS_SemicolonKeyword_2_1_or___LeftCurlyBracketKeyword_2_0_0_RightCurlyBracketKeyword_2_0_1__.equals(syntax))
				emit_EnumerationLiteralCS_SemicolonKeyword_2_1_or___LeftCurlyBracketKeyword_2_0_0_RightCurlyBracketKeyword_2_0_1__(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_MultiplicityCS_VerticalLineQuestionMarkKeyword_2_0_q.equals(syntax))
				emit_MultiplicityCS_VerticalLineQuestionMarkKeyword_2_0_q(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_OperationCS_CommaKeyword_9_1_1_q.equals(syntax))
				emit_OperationCS_CommaKeyword_9_1_1_q(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_OperationCS_SemicolonKeyword_10_1_or___LeftCurlyBracketKeyword_10_0_0___BodyKeyword_10_0_1_0_UnrestrictedNameParserRuleCall_10_0_1_1_q_ColonKeyword_10_0_1_2_SemicolonKeyword_10_0_1_4__a_RightCurlyBracketKeyword_10_0_2__.equals(syntax))
				emit_OperationCS_SemicolonKeyword_10_1_or___LeftCurlyBracketKeyword_10_0_0___BodyKeyword_10_0_1_0_UnrestrictedNameParserRuleCall_10_0_1_1_q_ColonKeyword_10_0_1_2_SemicolonKeyword_10_0_1_4__a_RightCurlyBracketKeyword_10_0_2__(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_OperationCS_UnrestrictedNameParserRuleCall_10_0_1_1_q.equals(syntax))
				emit_OperationCS_UnrestrictedNameParserRuleCall_10_0_1_1_q(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_OperationCS___BodyKeyword_10_0_1_0_UnrestrictedNameParserRuleCall_10_0_1_1_q_ColonKeyword_10_0_1_2_SemicolonKeyword_10_0_1_4__a.equals(syntax))
				emit_OperationCS___BodyKeyword_10_0_1_0_UnrestrictedNameParserRuleCall_10_0_1_1_q_ColonKeyword_10_0_1_2_SemicolonKeyword_10_0_1_4__a(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_OperationCS___SemicolonKeyword_10_0_1_4_BodyKeyword_10_0_1_0_UnrestrictedNameParserRuleCall_10_0_1_1_q_ColonKeyword_10_0_1_2__a.equals(syntax))
				emit_OperationCS___SemicolonKeyword_10_0_1_4_BodyKeyword_10_0_1_0_UnrestrictedNameParserRuleCall_10_0_1_1_q_ColonKeyword_10_0_1_2__a(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_OperationCS___SemicolonKeyword_10_0_1_4_BodyKeyword_10_0_1_0_UnrestrictedNameParserRuleCall_10_0_1_1_q_ColonKeyword_10_0_1_2__p.equals(syntax))
				emit_OperationCS___SemicolonKeyword_10_0_1_4_BodyKeyword_10_0_1_0_UnrestrictedNameParserRuleCall_10_0_1_1_q_ColonKeyword_10_0_1_2__p(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_ParameterCS_CommaKeyword_2_1_1_q.equals(syntax))
				emit_ParameterCS_CommaKeyword_2_1_1_q(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_ParameterCS___LeftCurlyBracketKeyword_3_0_RightCurlyBracketKeyword_3_1__q.equals(syntax))
				emit_ParameterCS___LeftCurlyBracketKeyword_3_0_RightCurlyBracketKeyword_3_1__q(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_ReferenceCS_CommaKeyword_6_1_1_q.equals(syntax))
				emit_ReferenceCS_CommaKeyword_6_1_1_q(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_ReferenceCS_SemicolonKeyword_7_1_or___LeftCurlyBracketKeyword_7_0_0_____DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4___or___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4____a_RightCurlyBracketKeyword_7_0_2__.equals(syntax))
				emit_ReferenceCS_SemicolonKeyword_7_1_or___LeftCurlyBracketKeyword_7_0_0_____DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4___or___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4____a_RightCurlyBracketKeyword_7_0_2__(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_ReferenceCS_UnrestrictedNameParserRuleCall_7_0_1_0_1_q.equals(syntax))
				emit_ReferenceCS_UnrestrictedNameParserRuleCall_7_0_1_0_1_q(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_ReferenceCS_UnrestrictedNameParserRuleCall_7_0_1_1_1_q.equals(syntax))
				emit_ReferenceCS_UnrestrictedNameParserRuleCall_7_0_1_1_1_q(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_ReferenceCS___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4__a__a.equals(syntax))
				emit_ReferenceCS___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4__a__a(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_ReferenceCS___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4__a.equals(syntax))
				emit_ReferenceCS___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4__a(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_ReferenceCS___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2___SemicolonKeyword_7_0_1_1_4_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2__a___or_____DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2___SemicolonKeyword_7_0_1_1_4_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2__a_SemicolonKeyword_7_0_1_1_4__q___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4__p_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2___SemicolonKeyword_7_0_1_1_4_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2__a___SemicolonKeyword_7_0_1_1_4___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4__p_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2___SemicolonKeyword_7_0_1_1_4_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2__a__a__.equals(syntax))
				emit_ReferenceCS___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2___SemicolonKeyword_7_0_1_1_4_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2__a___or_____DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2___SemicolonKeyword_7_0_1_1_4_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2__a_SemicolonKeyword_7_0_1_1_4__q___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4__p_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2___SemicolonKeyword_7_0_1_1_4_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2__a___SemicolonKeyword_7_0_1_1_4___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4__p_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2___SemicolonKeyword_7_0_1_1_4_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2__a__a__(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_ReferenceCS___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4__a__a.equals(syntax))
				emit_ReferenceCS___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4__a__a(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_ReferenceCS___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4__a.equals(syntax))
				emit_ReferenceCS___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4__a(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_ReferenceCS___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2___SemicolonKeyword_7_0_1_0_4_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2__a___or_____InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2___SemicolonKeyword_7_0_1_0_4_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2__a_SemicolonKeyword_7_0_1_0_4__q___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4__p_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2___SemicolonKeyword_7_0_1_0_4_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2__a___SemicolonKeyword_7_0_1_0_4___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4__p_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2___SemicolonKeyword_7_0_1_0_4_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2__a__a__.equals(syntax))
				emit_ReferenceCS___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2___SemicolonKeyword_7_0_1_0_4_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2__a___or_____InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2___SemicolonKeyword_7_0_1_0_4_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2__a_SemicolonKeyword_7_0_1_0_4__q___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4__p_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2___SemicolonKeyword_7_0_1_0_4_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2__a___SemicolonKeyword_7_0_1_0_4___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4__p_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2___SemicolonKeyword_7_0_1_0_4_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2__a__a__(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_ReferenceCS___SemicolonKeyword_7_0_1_0_4___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4__a_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2__a.equals(syntax))
				emit_ReferenceCS___SemicolonKeyword_7_0_1_0_4___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4__a_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2__a(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_ReferenceCS___SemicolonKeyword_7_0_1_0_4___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4__a_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2__p.equals(syntax))
				emit_ReferenceCS___SemicolonKeyword_7_0_1_0_4___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4__a_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2__p(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_ReferenceCS___SemicolonKeyword_7_0_1_1_4___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4__a_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2__a.equals(syntax))
				emit_ReferenceCS___SemicolonKeyword_7_0_1_1_4___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4__a_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2__a(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_ReferenceCS___SemicolonKeyword_7_0_1_1_4___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4__a_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2__p.equals(syntax))
				emit_ReferenceCS___SemicolonKeyword_7_0_1_1_4___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4__a_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2__p(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_SimpleTargetElementCS___IteratesKeyword_2_0_LeftCurlyBracketKeyword_2_1_1_0_RightCurlyBracketKeyword_2_1_1_2__q.equals(syntax))
				emit_SimpleTargetElementCS___IteratesKeyword_2_0_LeftCurlyBracketKeyword_2_1_1_0_RightCurlyBracketKeyword_2_1_1_2__q(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_StructuredClassCS_SemicolonKeyword_7_1_or___LeftCurlyBracketKeyword_7_0_0_RightCurlyBracketKeyword_7_0_2__.equals(syntax))
				emit_StructuredClassCS_SemicolonKeyword_7_1_or___LeftCurlyBracketKeyword_7_0_0_RightCurlyBracketKeyword_7_0_2__(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_StructuredClassCS___LeftCurlyBracketKeyword_6_0_RightCurlyBracketKeyword_6_2__q.equals(syntax))
				emit_StructuredClassCS___LeftCurlyBracketKeyword_6_0_RightCurlyBracketKeyword_6_2__q(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_TargetCS_SemicolonKeyword_5_q.equals(syntax))
				emit_TargetCS_SemicolonKeyword_5_q(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_TupleTypeCS___LeftParenthesisKeyword_1_0_RightParenthesisKeyword_1_2__q.equals(syntax))
				emit_TupleTypeCS___LeftParenthesisKeyword_1_0_RightParenthesisKeyword_1_2__q(semanticObject, getLastNavigableState(), syntaxNodes);
			else acceptNodes(getLastNavigableState(), syntaxNodes);
		}
	}

	/**
	 * Ambiguous syntax:
	 *     ','?
	 *
	 * This ambiguous syntax occurs at:
	 *     (
	 *         qualifiers+='!derived'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!derived'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!id'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!id'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!ordered'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!ordered'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!readonly'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!readonly'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!transient'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!transient'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!unique'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!unique'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!unsettable'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!unsettable'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!volatile'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!volatile'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='derived'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='derived'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='id'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='id'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='ordered'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='ordered'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='readonly'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='readonly'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='transient'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='transient'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='unique'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='unique'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='unsettable'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='unsettable'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='volatile'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='volatile'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     qualifiers+='!derived' (ambiguity) '}' (('{' (('initial' UnrestrictedName? ':' ';') | ('derivation' UnrestrictedName? ':' ';'))* '}') | ';') (rule end)
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='!id'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='!readonly'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='!transient'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='!unsettable'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='!volatile'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='id'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='readonly'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='transient'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='unsettable'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='volatile'
	 *     qualifiers+='!id' (ambiguity) '}' (('{' (('initial' UnrestrictedName? ':' ';') | ('derivation' UnrestrictedName? ':' ';'))* '}') | ';') (rule end)
	 *     qualifiers+='!id' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='!id' (ambiguity) qualifiers+='!id'
	 *     qualifiers+='!id' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='!id' (ambiguity) qualifiers+='!readonly'
	 *     qualifiers+='!id' (ambiguity) qualifiers+='!transient'
	 *     qualifiers+='!id' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='!id' (ambiguity) qualifiers+='!unsettable'
	 *     qualifiers+='!id' (ambiguity) qualifiers+='!volatile'
	 *     qualifiers+='!id' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='!id' (ambiguity) qualifiers+='id'
	 *     qualifiers+='!id' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='!id' (ambiguity) qualifiers+='readonly'
	 *     qualifiers+='!id' (ambiguity) qualifiers+='transient'
	 *     qualifiers+='!id' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='!id' (ambiguity) qualifiers+='unsettable'
	 *     qualifiers+='!id' (ambiguity) qualifiers+='volatile'
	 *     qualifiers+='!ordered' (ambiguity) '}' (('{' (('initial' UnrestrictedName? ':' ';') | ('derivation' UnrestrictedName? ':' ';'))* '}') | ';') (rule end)
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='!id'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='!readonly'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='!transient'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='!unsettable'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='!volatile'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='id'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='readonly'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='transient'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='unsettable'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='volatile'
	 *     qualifiers+='!readonly' (ambiguity) '}' (('{' (('initial' UnrestrictedName? ':' ';') | ('derivation' UnrestrictedName? ':' ';'))* '}') | ';') (rule end)
	 *     qualifiers+='!readonly' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='!readonly' (ambiguity) qualifiers+='!id'
	 *     qualifiers+='!readonly' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='!readonly' (ambiguity) qualifiers+='!readonly'
	 *     qualifiers+='!readonly' (ambiguity) qualifiers+='!transient'
	 *     qualifiers+='!readonly' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='!readonly' (ambiguity) qualifiers+='!unsettable'
	 *     qualifiers+='!readonly' (ambiguity) qualifiers+='!volatile'
	 *     qualifiers+='!readonly' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='!readonly' (ambiguity) qualifiers+='id'
	 *     qualifiers+='!readonly' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='!readonly' (ambiguity) qualifiers+='readonly'
	 *     qualifiers+='!readonly' (ambiguity) qualifiers+='transient'
	 *     qualifiers+='!readonly' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='!readonly' (ambiguity) qualifiers+='unsettable'
	 *     qualifiers+='!readonly' (ambiguity) qualifiers+='volatile'
	 *     qualifiers+='!transient' (ambiguity) '}' (('{' (('initial' UnrestrictedName? ':' ';') | ('derivation' UnrestrictedName? ':' ';'))* '}') | ';') (rule end)
	 *     qualifiers+='!transient' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='!transient' (ambiguity) qualifiers+='!id'
	 *     qualifiers+='!transient' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='!transient' (ambiguity) qualifiers+='!readonly'
	 *     qualifiers+='!transient' (ambiguity) qualifiers+='!transient'
	 *     qualifiers+='!transient' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='!transient' (ambiguity) qualifiers+='!unsettable'
	 *     qualifiers+='!transient' (ambiguity) qualifiers+='!volatile'
	 *     qualifiers+='!transient' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='!transient' (ambiguity) qualifiers+='id'
	 *     qualifiers+='!transient' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='!transient' (ambiguity) qualifiers+='readonly'
	 *     qualifiers+='!transient' (ambiguity) qualifiers+='transient'
	 *     qualifiers+='!transient' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='!transient' (ambiguity) qualifiers+='unsettable'
	 *     qualifiers+='!transient' (ambiguity) qualifiers+='volatile'
	 *     qualifiers+='!unique' (ambiguity) '}' (('{' (('initial' UnrestrictedName? ':' ';') | ('derivation' UnrestrictedName? ':' ';'))* '}') | ';') (rule end)
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='!id'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='!readonly'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='!transient'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='!unsettable'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='!volatile'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='id'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='readonly'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='transient'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='unsettable'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='volatile'
	 *     qualifiers+='!unsettable' (ambiguity) '}' (('{' (('initial' UnrestrictedName? ':' ';') | ('derivation' UnrestrictedName? ':' ';'))* '}') | ';') (rule end)
	 *     qualifiers+='!unsettable' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='!unsettable' (ambiguity) qualifiers+='!id'
	 *     qualifiers+='!unsettable' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='!unsettable' (ambiguity) qualifiers+='!readonly'
	 *     qualifiers+='!unsettable' (ambiguity) qualifiers+='!transient'
	 *     qualifiers+='!unsettable' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='!unsettable' (ambiguity) qualifiers+='!unsettable'
	 *     qualifiers+='!unsettable' (ambiguity) qualifiers+='!volatile'
	 *     qualifiers+='!unsettable' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='!unsettable' (ambiguity) qualifiers+='id'
	 *     qualifiers+='!unsettable' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='!unsettable' (ambiguity) qualifiers+='readonly'
	 *     qualifiers+='!unsettable' (ambiguity) qualifiers+='transient'
	 *     qualifiers+='!unsettable' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='!unsettable' (ambiguity) qualifiers+='unsettable'
	 *     qualifiers+='!unsettable' (ambiguity) qualifiers+='volatile'
	 *     qualifiers+='!volatile' (ambiguity) '}' (('{' (('initial' UnrestrictedName? ':' ';') | ('derivation' UnrestrictedName? ':' ';'))* '}') | ';') (rule end)
	 *     qualifiers+='!volatile' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='!volatile' (ambiguity) qualifiers+='!id'
	 *     qualifiers+='!volatile' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='!volatile' (ambiguity) qualifiers+='!readonly'
	 *     qualifiers+='!volatile' (ambiguity) qualifiers+='!transient'
	 *     qualifiers+='!volatile' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='!volatile' (ambiguity) qualifiers+='!unsettable'
	 *     qualifiers+='!volatile' (ambiguity) qualifiers+='!volatile'
	 *     qualifiers+='!volatile' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='!volatile' (ambiguity) qualifiers+='id'
	 *     qualifiers+='!volatile' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='!volatile' (ambiguity) qualifiers+='readonly'
	 *     qualifiers+='!volatile' (ambiguity) qualifiers+='transient'
	 *     qualifiers+='!volatile' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='!volatile' (ambiguity) qualifiers+='unsettable'
	 *     qualifiers+='!volatile' (ambiguity) qualifiers+='volatile'
	 *     qualifiers+='derived' (ambiguity) '}' (('{' (('initial' UnrestrictedName? ':' ';') | ('derivation' UnrestrictedName? ':' ';'))* '}') | ';') (rule end)
	 *     qualifiers+='derived' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='!id'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='!readonly'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='!transient'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='!unsettable'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='!volatile'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='id'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='readonly'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='transient'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='unsettable'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='volatile'
	 *     qualifiers+='id' (ambiguity) '}' (('{' (('initial' UnrestrictedName? ':' ';') | ('derivation' UnrestrictedName? ':' ';'))* '}') | ';') (rule end)
	 *     qualifiers+='id' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='id' (ambiguity) qualifiers+='!id'
	 *     qualifiers+='id' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='id' (ambiguity) qualifiers+='!readonly'
	 *     qualifiers+='id' (ambiguity) qualifiers+='!transient'
	 *     qualifiers+='id' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='id' (ambiguity) qualifiers+='!unsettable'
	 *     qualifiers+='id' (ambiguity) qualifiers+='!volatile'
	 *     qualifiers+='id' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='id' (ambiguity) qualifiers+='id'
	 *     qualifiers+='id' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='id' (ambiguity) qualifiers+='readonly'
	 *     qualifiers+='id' (ambiguity) qualifiers+='transient'
	 *     qualifiers+='id' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='id' (ambiguity) qualifiers+='unsettable'
	 *     qualifiers+='id' (ambiguity) qualifiers+='volatile'
	 *     qualifiers+='ordered' (ambiguity) '}' (('{' (('initial' UnrestrictedName? ':' ';') | ('derivation' UnrestrictedName? ':' ';'))* '}') | ';') (rule end)
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='!id'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='!readonly'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='!transient'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='!unsettable'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='!volatile'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='id'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='readonly'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='transient'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='unsettable'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='volatile'
	 *     qualifiers+='readonly' (ambiguity) '}' (('{' (('initial' UnrestrictedName? ':' ';') | ('derivation' UnrestrictedName? ':' ';'))* '}') | ';') (rule end)
	 *     qualifiers+='readonly' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='readonly' (ambiguity) qualifiers+='!id'
	 *     qualifiers+='readonly' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='readonly' (ambiguity) qualifiers+='!readonly'
	 *     qualifiers+='readonly' (ambiguity) qualifiers+='!transient'
	 *     qualifiers+='readonly' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='readonly' (ambiguity) qualifiers+='!unsettable'
	 *     qualifiers+='readonly' (ambiguity) qualifiers+='!volatile'
	 *     qualifiers+='readonly' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='readonly' (ambiguity) qualifiers+='id'
	 *     qualifiers+='readonly' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='readonly' (ambiguity) qualifiers+='readonly'
	 *     qualifiers+='readonly' (ambiguity) qualifiers+='transient'
	 *     qualifiers+='readonly' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='readonly' (ambiguity) qualifiers+='unsettable'
	 *     qualifiers+='readonly' (ambiguity) qualifiers+='volatile'
	 *     qualifiers+='transient' (ambiguity) '}' (('{' (('initial' UnrestrictedName? ':' ';') | ('derivation' UnrestrictedName? ':' ';'))* '}') | ';') (rule end)
	 *     qualifiers+='transient' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='transient' (ambiguity) qualifiers+='!id'
	 *     qualifiers+='transient' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='transient' (ambiguity) qualifiers+='!readonly'
	 *     qualifiers+='transient' (ambiguity) qualifiers+='!transient'
	 *     qualifiers+='transient' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='transient' (ambiguity) qualifiers+='!unsettable'
	 *     qualifiers+='transient' (ambiguity) qualifiers+='!volatile'
	 *     qualifiers+='transient' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='transient' (ambiguity) qualifiers+='id'
	 *     qualifiers+='transient' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='transient' (ambiguity) qualifiers+='readonly'
	 *     qualifiers+='transient' (ambiguity) qualifiers+='transient'
	 *     qualifiers+='transient' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='transient' (ambiguity) qualifiers+='unsettable'
	 *     qualifiers+='transient' (ambiguity) qualifiers+='volatile'
	 *     qualifiers+='unique' (ambiguity) '}' (('{' (('initial' UnrestrictedName? ':' ';') | ('derivation' UnrestrictedName? ':' ';'))* '}') | ';') (rule end)
	 *     qualifiers+='unique' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='!id'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='!readonly'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='!transient'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='!unsettable'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='!volatile'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='id'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='readonly'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='transient'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='unsettable'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='volatile'
	 *     qualifiers+='unsettable' (ambiguity) '}' (('{' (('initial' UnrestrictedName? ':' ';') | ('derivation' UnrestrictedName? ':' ';'))* '}') | ';') (rule end)
	 *     qualifiers+='unsettable' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='unsettable' (ambiguity) qualifiers+='!id'
	 *     qualifiers+='unsettable' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='unsettable' (ambiguity) qualifiers+='!readonly'
	 *     qualifiers+='unsettable' (ambiguity) qualifiers+='!transient'
	 *     qualifiers+='unsettable' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='unsettable' (ambiguity) qualifiers+='!unsettable'
	 *     qualifiers+='unsettable' (ambiguity) qualifiers+='!volatile'
	 *     qualifiers+='unsettable' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='unsettable' (ambiguity) qualifiers+='id'
	 *     qualifiers+='unsettable' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='unsettable' (ambiguity) qualifiers+='readonly'
	 *     qualifiers+='unsettable' (ambiguity) qualifiers+='transient'
	 *     qualifiers+='unsettable' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='unsettable' (ambiguity) qualifiers+='unsettable'
	 *     qualifiers+='unsettable' (ambiguity) qualifiers+='volatile'
	 *     qualifiers+='volatile' (ambiguity) '}' (('{' (('initial' UnrestrictedName? ':' ';') | ('derivation' UnrestrictedName? ':' ';'))* '}') | ';') (rule end)
	 *     qualifiers+='volatile' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='volatile' (ambiguity) qualifiers+='!id'
	 *     qualifiers+='volatile' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='volatile' (ambiguity) qualifiers+='!readonly'
	 *     qualifiers+='volatile' (ambiguity) qualifiers+='!transient'
	 *     qualifiers+='volatile' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='volatile' (ambiguity) qualifiers+='!unsettable'
	 *     qualifiers+='volatile' (ambiguity) qualifiers+='!volatile'
	 *     qualifiers+='volatile' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='volatile' (ambiguity) qualifiers+='id'
	 *     qualifiers+='volatile' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='volatile' (ambiguity) qualifiers+='readonly'
	 *     qualifiers+='volatile' (ambiguity) qualifiers+='transient'
	 *     qualifiers+='volatile' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='volatile' (ambiguity) qualifiers+='unsettable'
	 *     qualifiers+='volatile' (ambiguity) qualifiers+='volatile'
	 */
	protected void emit_AttributeCS_CommaKeyword_5_1_1_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     ('{' (('initial' UnrestrictedName? ':' ';') | ('derivation' UnrestrictedName? ':' ';'))* '}') | ';'
	 *
	 * This ambiguous syntax occurs at:
	 *     default=SINGLE_QUOTED_STRING (ambiguity) (rule end)
	 *     name=UnrestrictedName (ambiguity) (rule end)
	 *     ownedType=TypedMultiplicityRefCS (ambiguity) (rule end)
	 *     qualifiers+='!derived' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='!id' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='!ordered' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='!readonly' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='!transient' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='!unique' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='!unsettable' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='!volatile' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='derived' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='id' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='ordered' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='readonly' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='transient' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='unique' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='unsettable' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='volatile' ','? '}' (ambiguity) (rule end)
	 */
	protected void emit_AttributeCS_SemicolonKeyword_6_1_or___LeftCurlyBracketKeyword_6_0_0_____DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4___or___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4____a_RightCurlyBracketKeyword_6_0_2__(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     UnrestrictedName?
	 *
	 * This ambiguous syntax occurs at:
	 *     (
	 *         default=SINGLE_QUOTED_STRING
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         name=UnrestrictedName
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         ownedType=TypedMultiplicityRefCS
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!derived'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!id'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!ordered'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!readonly'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!transient'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!unique'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!unsettable'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!volatile'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='derived'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='id'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='ordered'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='readonly'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='transient'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='unique'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='unsettable'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='volatile'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 */
	protected void emit_AttributeCS_UnrestrictedNameParserRuleCall_6_0_1_0_1_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     UnrestrictedName?
	 *
	 * This ambiguous syntax occurs at:
	 *     (
	 *         default=SINGLE_QUOTED_STRING
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         name=UnrestrictedName
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         ownedType=TypedMultiplicityRefCS
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!derived'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!id'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!ordered'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!readonly'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!transient'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!unique'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!unsettable'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!volatile'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='derived'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='id'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='ordered'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='readonly'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='transient'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='unique'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='unsettable'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='volatile'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 */
	protected void emit_AttributeCS_UnrestrictedNameParserRuleCall_6_0_1_1_1_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     ('derivation' UnrestrictedName? ':' ';' ('initial' UnrestrictedName? ':' ';')*)*
	 *
	 * This ambiguous syntax occurs at:
	 *     ownedDefaultExpressions+=SpecificationCS ';' ('initial' UnrestrictedName? ':' ';')* (ambiguity) '}' (rule end)
	 */
	protected void emit_AttributeCS___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4__a__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     ('derivation' UnrestrictedName? ':' ';')*
	 *
	 * This ambiguous syntax occurs at:
	 *     default=SINGLE_QUOTED_STRING '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     name=UnrestrictedName '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     ownedDefaultExpressions+=SpecificationCS ';' (ambiguity) ('initial' UnrestrictedName? ':' ';' (ambiguity))* '}' (rule end)
	 *     ownedType=TypedMultiplicityRefCS '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!derived' ','? '}' '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!id' ','? '}' '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!ordered' ','? '}' '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!readonly' ','? '}' '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!transient' ','? '}' '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!unique' ','? '}' '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!unsettable' ','? '}' '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!volatile' ','? '}' '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='derived' ','? '}' '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='id' ','? '}' '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='ordered' ','? '}' '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='readonly' ','? '}' '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='transient' ','? '}' '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='unique' ','? '}' '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='unsettable' ','? '}' '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='volatile' ','? '}' '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 */
	protected void emit_AttributeCS___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     (
	  *         ('derivation' UnrestrictedName? ':' (';' 'derivation' UnrestrictedName? ':')*) |
	  *         (
	  *             ('derivation' UnrestrictedName? ':' (';' 'derivation' UnrestrictedName? ':')* ';')?
	  *             ('initial' UnrestrictedName? ':' ';')+
	  *             'derivation'
	  *             UnrestrictedName?
	  *             ':'
	  *             (';' 'derivation' UnrestrictedName? ':')*
	  *             (
	  *                 ';'
	  *                 ('initial' UnrestrictedName? ':' ';')+
	  *                 'derivation'
	  *                 UnrestrictedName?
	  *                 ':'
	  *                 (';' 'derivation' UnrestrictedName? ':')*
	  *             )*
	  *         )
	  *     )
	 *
	 * This ambiguous syntax occurs at:
	 *     ownedDefaultExpressions+=SpecificationCS ';' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 */
	protected void emit_AttributeCS___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2___SemicolonKeyword_6_0_1_1_4_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a___or_____DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2___SemicolonKeyword_6_0_1_1_4_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a_SemicolonKeyword_6_0_1_1_4__q___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4__p_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2___SemicolonKeyword_6_0_1_1_4_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a___SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4__p_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2___SemicolonKeyword_6_0_1_1_4_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a__a__(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     ('initial' UnrestrictedName? ':' ';' ('derivation' UnrestrictedName? ':' ';')*)*
	 *
	 * This ambiguous syntax occurs at:
	 *     ownedDefaultExpressions+=SpecificationCS ';' ('derivation' UnrestrictedName? ':' ';')* (ambiguity) '}' (rule end)
	 */
	protected void emit_AttributeCS___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__a__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     ('initial' UnrestrictedName? ':' ';')*
	 *
	 * This ambiguous syntax occurs at:
	 *     default=SINGLE_QUOTED_STRING '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     name=UnrestrictedName '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     ownedDefaultExpressions+=SpecificationCS ';' (ambiguity) ('derivation' UnrestrictedName? ':' ';' (ambiguity))* '}' (rule end)
	 *     ownedType=TypedMultiplicityRefCS '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!derived' ','? '}' '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!id' ','? '}' '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!ordered' ','? '}' '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!readonly' ','? '}' '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!transient' ','? '}' '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!unique' ','? '}' '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!unsettable' ','? '}' '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!volatile' ','? '}' '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='derived' ','? '}' '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='id' ','? '}' '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='ordered' ','? '}' '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='readonly' ','? '}' '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='transient' ','? '}' '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='unique' ','? '}' '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='unsettable' ','? '}' '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='volatile' ','? '}' '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 */
	protected void emit_AttributeCS___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     (
	  *         ('initial' UnrestrictedName? ':' (';' 'initial' UnrestrictedName? ':')*) |
	  *         (
	  *             ('initial' UnrestrictedName? ':' (';' 'initial' UnrestrictedName? ':')* ';')?
	  *             ('derivation' UnrestrictedName? ':' ';')+
	  *             'initial'
	  *             UnrestrictedName?
	  *             ':'
	  *             (';' 'initial' UnrestrictedName? ':')*
	  *             (
	  *                 ';'
	  *                 ('derivation' UnrestrictedName? ':' ';')+
	  *                 'initial'
	  *                 UnrestrictedName?
	  *                 ':'
	  *                 (';' 'initial' UnrestrictedName? ':')*
	  *             )*
	  *         )
	  *     )
	 *
	 * This ambiguous syntax occurs at:
	 *     ownedDefaultExpressions+=SpecificationCS ';' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 */
	protected void emit_AttributeCS___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2___SemicolonKeyword_6_0_1_0_4_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2__a___or_____InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2___SemicolonKeyword_6_0_1_0_4_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2__a_SemicolonKeyword_6_0_1_0_4__q___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__p_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2___SemicolonKeyword_6_0_1_0_4_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2__a___SemicolonKeyword_6_0_1_0_4___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__p_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2___SemicolonKeyword_6_0_1_0_4_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2__a__a__(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')*
	 *
	 * This ambiguous syntax occurs at:
	 *     default=SINGLE_QUOTED_STRING '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     name=UnrestrictedName '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     ownedType=TypedMultiplicityRefCS '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!derived' ','? '}' '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!id' ','? '}' '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!ordered' ','? '}' '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!readonly' ','? '}' '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!transient' ','? '}' '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!unique' ','? '}' '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!unsettable' ','? '}' '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!volatile' ','? '}' '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='derived' ','? '}' '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='id' ','? '}' '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='ordered' ','? '}' '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='readonly' ','? '}' '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='transient' ','? '}' '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='unique' ','? '}' '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='unsettable' ','? '}' '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='volatile' ','? '}' '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 */
	protected void emit_AttributeCS___SemicolonKeyword_6_0_1_0_4___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__a_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')+
	 *
	 * This ambiguous syntax occurs at:
	 *     ownedDefaultExpressions+=SpecificationCS (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 */
	protected void emit_AttributeCS___SemicolonKeyword_6_0_1_0_4___DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2_SemicolonKeyword_6_0_1_1_4__a_InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2__p(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
	 *
	 * This ambiguous syntax occurs at:
	 *     default=SINGLE_QUOTED_STRING '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     name=UnrestrictedName '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     ownedType=TypedMultiplicityRefCS '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!derived' ','? '}' '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!id' ','? '}' '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!ordered' ','? '}' '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!readonly' ','? '}' '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!transient' ','? '}' '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!unique' ','? '}' '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!unsettable' ','? '}' '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!volatile' ','? '}' '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='derived' ','? '}' '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='id' ','? '}' '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='ordered' ','? '}' '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='readonly' ','? '}' '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='transient' ','? '}' '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='unique' ','? '}' '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='unsettable' ','? '}' '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='volatile' ','? '}' '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 */
	protected void emit_AttributeCS___SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4__a_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')+
	 *
	 * This ambiguous syntax occurs at:
	 *     ownedDefaultExpressions+=SpecificationCS (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 */
	protected void emit_AttributeCS___SemicolonKeyword_6_0_1_1_4___InitialKeyword_6_0_1_0_0_UnrestrictedNameParserRuleCall_6_0_1_0_1_q_ColonKeyword_6_0_1_0_2_SemicolonKeyword_6_0_1_0_4__a_DerivationKeyword_6_0_1_1_0_UnrestrictedNameParserRuleCall_6_0_1_1_1_q_ColonKeyword_6_0_1_1_2__p(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     ';'?
	 *
	 * This ambiguous syntax occurs at:
	 *     (rule start) '{' '}' (ambiguity) (rule start)
	 *     ownedTargetElements+=SimpleTargetElementCS '}' (ambiguity) (rule end)
	 */
	protected void emit_CompoundTargetElementCS_SemicolonKeyword_3_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     ('{' '}') | ';'
	 *
	 * This ambiguous syntax occurs at:
	 *     instanceClassName=SINGLE_QUOTED_STRING ('{' '!serializable'? '}')? (ambiguity) (rule end)
	 *     isSerializable?='serializable' '}' (ambiguity) (rule end)
	 *     name=UnrestrictedName ('{' '!serializable'? '}')? (ambiguity) (rule end)
	 *     ownedSignature=TemplateSignatureCS ('{' '!serializable'? '}')? (ambiguity) (rule end)
	 */
	protected void emit_DataTypeCS_SemicolonKeyword_6_1_or___LeftCurlyBracketKeyword_6_0_0_RightCurlyBracketKeyword_6_0_1__(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     ('{' '!serializable'? '}')?
	 *
	 * This ambiguous syntax occurs at:
	 *     instanceClassName=SINGLE_QUOTED_STRING (ambiguity) (('{' '}') | ';') (rule end)
	 *     name=UnrestrictedName (ambiguity) (('{' '}') | ';') (rule end)
	 *     ownedSignature=TemplateSignatureCS (ambiguity) (('{' '}') | ';') (rule end)
	 */
	protected void emit_DataTypeCS___LeftCurlyBracketKeyword_5_0_SerializableKeyword_5_1_1_q_RightCurlyBracketKeyword_5_2__q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     ('{' '}') | ';'
	 *
	 * This ambiguous syntax occurs at:
	 *     instanceClassName=SINGLE_QUOTED_STRING ('{' '!serializable'? '}')? (ambiguity) (rule end)
	 *     isSerializable?='serializable' '}' (ambiguity) (rule end)
	 *     name=UnrestrictedName ('{' '!serializable'? '}')? (ambiguity) (rule end)
	 *     ownedSignature=TemplateSignatureCS ('{' '!serializable'? '}')? (ambiguity) (rule end)
	 */
	protected void emit_EnumerationCS_SemicolonKeyword_5_1_or___LeftCurlyBracketKeyword_5_0_0_RightCurlyBracketKeyword_5_0_2__(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     ('{' '!serializable'? '}')?
	 *
	 * This ambiguous syntax occurs at:
	 *     instanceClassName=SINGLE_QUOTED_STRING (ambiguity) '{' ownedLiterals+=EnumerationLiteralCS
	 *     instanceClassName=SINGLE_QUOTED_STRING (ambiguity) (('{' '}') | ';') (rule end)
	 *     name=UnrestrictedName (ambiguity) '{' ownedLiterals+=EnumerationLiteralCS
	 *     name=UnrestrictedName (ambiguity) (('{' '}') | ';') (rule end)
	 *     ownedSignature=TemplateSignatureCS (ambiguity) '{' ownedLiterals+=EnumerationLiteralCS
	 *     ownedSignature=TemplateSignatureCS (ambiguity) (('{' '}') | ';') (rule end)
	 */
	protected void emit_EnumerationCS___LeftCurlyBracketKeyword_4_0_SerializableKeyword_4_1_1_q_RightCurlyBracketKeyword_4_2__q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     ('{' '}') | ';'
	 *
	 * This ambiguous syntax occurs at:
	 *     name=EnumerationLiteralName (ambiguity) (rule end)
	 *     name=UnrestrictedName (ambiguity) (rule end)
	 *     value=SIGNED (ambiguity) (rule end)
	 */
	protected void emit_EnumerationLiteralCS_SemicolonKeyword_2_1_or___LeftCurlyBracketKeyword_2_0_0_RightCurlyBracketKeyword_2_0_1__(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     '|?'?
	 *
	 * This ambiguous syntax occurs at:
	 *     lowerBound=LOWER (ambiguity) ']' (rule end)
	 *     stringBounds='*' (ambiguity) ']' (rule end)
	 *     stringBounds='+' (ambiguity) ']' (rule end)
	 *     stringBounds='?' (ambiguity) ']' (rule end)
	 *     upperBound=UPPER (ambiguity) ']' (rule end)
	 */
	protected void emit_MultiplicityCS_VerticalLineQuestionMarkKeyword_2_0_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     ','?
	 *
	 * This ambiguous syntax occurs at:
	 *     qualifiers+='!derived' (ambiguity) '}' '{' 'body' UnrestrictedName? ':' (';' 'body' UnrestrictedName? ':')* ownedBodyExpressions+=SpecificationCS
	 *     qualifiers+='!derived' (ambiguity) '}' (('{' ('body' UnrestrictedName? ':' ';')* '}') | ';') (rule end)
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='!ordered' (ambiguity) '}' '{' 'body' UnrestrictedName? ':' (';' 'body' UnrestrictedName? ':')* ownedBodyExpressions+=SpecificationCS
	 *     qualifiers+='!ordered' (ambiguity) '}' (('{' ('body' UnrestrictedName? ':' ';')* '}') | ';') (rule end)
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='!unique' (ambiguity) '}' '{' 'body' UnrestrictedName? ':' (';' 'body' UnrestrictedName? ':')* ownedBodyExpressions+=SpecificationCS
	 *     qualifiers+='!unique' (ambiguity) '}' (('{' ('body' UnrestrictedName? ':' ';')* '}') | ';') (rule end)
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='derived' (ambiguity) '}' '{' 'body' UnrestrictedName? ':' (';' 'body' UnrestrictedName? ':')* ownedBodyExpressions+=SpecificationCS
	 *     qualifiers+='derived' (ambiguity) '}' (('{' ('body' UnrestrictedName? ':' ';')* '}') | ';') (rule end)
	 *     qualifiers+='derived' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='ordered' (ambiguity) '}' '{' 'body' UnrestrictedName? ':' (';' 'body' UnrestrictedName? ':')* ownedBodyExpressions+=SpecificationCS
	 *     qualifiers+='ordered' (ambiguity) '}' (('{' ('body' UnrestrictedName? ':' ';')* '}') | ';') (rule end)
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='unique' (ambiguity) '}' '{' 'body' UnrestrictedName? ':' (';' 'body' UnrestrictedName? ':')* ownedBodyExpressions+=SpecificationCS
	 *     qualifiers+='unique' (ambiguity) '}' (('{' ('body' UnrestrictedName? ':' ';')* '}') | ';') (rule end)
	 *     qualifiers+='unique' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='unique'
	 */
	protected void emit_OperationCS_CommaKeyword_9_1_1_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     ('{' ('body' UnrestrictedName? ':' ';')* '}') | ';'
	 *
	 * This ambiguous syntax occurs at:
	 *     name=UnrestrictedName '(' ')' (ambiguity) (rule end)
	 *     ownedExceptions+=TypedRefCS (ambiguity) (rule end)
	 *     ownedParameters+=ParameterCS ')' (ambiguity) (rule end)
	 *     ownedType=TypedMultiplicityRefCS (ambiguity) (rule end)
	 *     qualifiers+='!derived' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='!ordered' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='!unique' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='derived' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='ordered' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='unique' ','? '}' (ambiguity) (rule end)
	 */
	protected void emit_OperationCS_SemicolonKeyword_10_1_or___LeftCurlyBracketKeyword_10_0_0___BodyKeyword_10_0_1_0_UnrestrictedNameParserRuleCall_10_0_1_1_q_ColonKeyword_10_0_1_2_SemicolonKeyword_10_0_1_4__a_RightCurlyBracketKeyword_10_0_2__(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     UnrestrictedName?
	 *
	 * This ambiguous syntax occurs at:
	 *     name=UnrestrictedName '(' ')' '{' 'body' (ambiguity) ':' (';' 'body' (ambiguity) ':')* ownedBodyExpressions+=SpecificationCS
	 *     ownedExceptions+=TypedRefCS '{' 'body' (ambiguity) ':' (';' 'body' (ambiguity) ':')* ownedBodyExpressions+=SpecificationCS
	 *     ownedParameters+=ParameterCS ')' '{' 'body' (ambiguity) ':' (';' 'body' (ambiguity) ':')* ownedBodyExpressions+=SpecificationCS
	 *     ownedType=TypedMultiplicityRefCS '{' 'body' (ambiguity) ':' (';' 'body' (ambiguity) ':')* ownedBodyExpressions+=SpecificationCS
	 *     qualifiers+='!derived' ','? '}' '{' 'body' (ambiguity) ':' (';' 'body' (ambiguity) ':')* ownedBodyExpressions+=SpecificationCS
	 *     qualifiers+='!ordered' ','? '}' '{' 'body' (ambiguity) ':' (';' 'body' (ambiguity) ':')* ownedBodyExpressions+=SpecificationCS
	 *     qualifiers+='!unique' ','? '}' '{' 'body' (ambiguity) ':' (';' 'body' (ambiguity) ':')* ownedBodyExpressions+=SpecificationCS
	 *     qualifiers+='derived' ','? '}' '{' 'body' (ambiguity) ':' (';' 'body' (ambiguity) ':')* ownedBodyExpressions+=SpecificationCS
	 *     qualifiers+='ordered' ','? '}' '{' 'body' (ambiguity) ':' (';' 'body' (ambiguity) ':')* ownedBodyExpressions+=SpecificationCS
	 *     qualifiers+='unique' ','? '}' '{' 'body' (ambiguity) ':' (';' 'body' (ambiguity) ':')* ownedBodyExpressions+=SpecificationCS
	 */
	protected void emit_OperationCS_UnrestrictedNameParserRuleCall_10_0_1_1_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     ('body' UnrestrictedName? ':' ';')*
	 *
	 * This ambiguous syntax occurs at:
	 *     ownedBodyExpressions+=SpecificationCS ';' (ambiguity) '}' (rule end)
	 */
	protected void emit_OperationCS___BodyKeyword_10_0_1_0_UnrestrictedNameParserRuleCall_10_0_1_1_q_ColonKeyword_10_0_1_2_SemicolonKeyword_10_0_1_4__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     (';' 'body' UnrestrictedName? ':')*
	 *
	 * This ambiguous syntax occurs at:
	 *     name=UnrestrictedName '(' ')' '{' 'body' UnrestrictedName? ':' (ambiguity) ownedBodyExpressions+=SpecificationCS
	 *     ownedExceptions+=TypedRefCS '{' 'body' UnrestrictedName? ':' (ambiguity) ownedBodyExpressions+=SpecificationCS
	 *     ownedParameters+=ParameterCS ')' '{' 'body' UnrestrictedName? ':' (ambiguity) ownedBodyExpressions+=SpecificationCS
	 *     ownedType=TypedMultiplicityRefCS '{' 'body' UnrestrictedName? ':' (ambiguity) ownedBodyExpressions+=SpecificationCS
	 *     qualifiers+='!derived' ','? '}' '{' 'body' UnrestrictedName? ':' (ambiguity) ownedBodyExpressions+=SpecificationCS
	 *     qualifiers+='!ordered' ','? '}' '{' 'body' UnrestrictedName? ':' (ambiguity) ownedBodyExpressions+=SpecificationCS
	 *     qualifiers+='!unique' ','? '}' '{' 'body' UnrestrictedName? ':' (ambiguity) ownedBodyExpressions+=SpecificationCS
	 *     qualifiers+='derived' ','? '}' '{' 'body' UnrestrictedName? ':' (ambiguity) ownedBodyExpressions+=SpecificationCS
	 *     qualifiers+='ordered' ','? '}' '{' 'body' UnrestrictedName? ':' (ambiguity) ownedBodyExpressions+=SpecificationCS
	 *     qualifiers+='unique' ','? '}' '{' 'body' UnrestrictedName? ':' (ambiguity) ownedBodyExpressions+=SpecificationCS
	 */
	protected void emit_OperationCS___SemicolonKeyword_10_0_1_4_BodyKeyword_10_0_1_0_UnrestrictedNameParserRuleCall_10_0_1_1_q_ColonKeyword_10_0_1_2__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     (';' 'body' UnrestrictedName? ':')+
	 *
	 * This ambiguous syntax occurs at:
	 *     ownedBodyExpressions+=SpecificationCS (ambiguity) ownedBodyExpressions+=SpecificationCS
	 */
	protected void emit_OperationCS___SemicolonKeyword_10_0_1_4_BodyKeyword_10_0_1_0_UnrestrictedNameParserRuleCall_10_0_1_1_q_ColonKeyword_10_0_1_2__p(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     ','?
	 *
	 * This ambiguous syntax occurs at:
	 *     qualifiers+='!ordered' (ambiguity) '}' ('{' '}')? (rule end)
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='!unique' (ambiguity) '}' ('{' '}')? (rule end)
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='ordered' (ambiguity) '}' ('{' '}')? (rule end)
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='unique' (ambiguity) '}' ('{' '}')? (rule end)
	 *     qualifiers+='unique' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='unique'
	 */
	protected void emit_ParameterCS_CommaKeyword_2_1_1_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     ('{' '}')?
	 *
	 * This ambiguous syntax occurs at:
	 *     name=UnrestrictedName (ambiguity) (rule end)
	 *     ownedType=TypedMultiplicityRefCS (ambiguity) (rule end)
	 *     qualifiers+='!ordered' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='!unique' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='ordered' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='unique' ','? '}' (ambiguity) (rule end)
	 */
	protected void emit_ParameterCS___LeftCurlyBracketKeyword_3_0_RightCurlyBracketKeyword_3_1__q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     ','?
	 *
	 * This ambiguous syntax occurs at:
	 *     (
	 *         qualifiers+='!composes'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!composes'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!derived'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!derived'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!ordered'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!ordered'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!readonly'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!readonly'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!resolve'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!resolve'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!transient'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!transient'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!unique'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!unique'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!unsettable'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!unsettable'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!volatile'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!volatile'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='composes'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='composes'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='derived'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='derived'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='ordered'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='ordered'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='readonly'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='readonly'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='resolve'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='resolve'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='transient'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='transient'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='unique'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='unique'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='unsettable'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='unsettable'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='volatile'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='volatile'
	 *         (ambiguity)
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         UnrestrictedName?
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     qualifiers+='!composes' (ambiguity) '}' (('{' (('initial' UnrestrictedName? ':' ';') | ('derivation' UnrestrictedName? ':' ';'))* '}') | ';') (rule end)
	 *     qualifiers+='!composes' (ambiguity) qualifiers+='!composes'
	 *     qualifiers+='!composes' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='!composes' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='!composes' (ambiguity) qualifiers+='!readonly'
	 *     qualifiers+='!composes' (ambiguity) qualifiers+='!resolve'
	 *     qualifiers+='!composes' (ambiguity) qualifiers+='!transient'
	 *     qualifiers+='!composes' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='!composes' (ambiguity) qualifiers+='!unsettable'
	 *     qualifiers+='!composes' (ambiguity) qualifiers+='!volatile'
	 *     qualifiers+='!composes' (ambiguity) qualifiers+='composes'
	 *     qualifiers+='!composes' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='!composes' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='!composes' (ambiguity) qualifiers+='readonly'
	 *     qualifiers+='!composes' (ambiguity) qualifiers+='resolve'
	 *     qualifiers+='!composes' (ambiguity) qualifiers+='transient'
	 *     qualifiers+='!composes' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='!composes' (ambiguity) qualifiers+='unsettable'
	 *     qualifiers+='!composes' (ambiguity) qualifiers+='volatile'
	 *     qualifiers+='!derived' (ambiguity) '}' (('{' (('initial' UnrestrictedName? ':' ';') | ('derivation' UnrestrictedName? ':' ';'))* '}') | ';') (rule end)
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='!composes'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='!readonly'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='!resolve'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='!transient'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='!unsettable'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='!volatile'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='composes'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='readonly'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='resolve'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='transient'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='unsettable'
	 *     qualifiers+='!derived' (ambiguity) qualifiers+='volatile'
	 *     qualifiers+='!ordered' (ambiguity) '}' (('{' (('initial' UnrestrictedName? ':' ';') | ('derivation' UnrestrictedName? ':' ';'))* '}') | ';') (rule end)
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='!composes'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='!readonly'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='!resolve'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='!transient'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='!unsettable'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='!volatile'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='composes'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='readonly'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='resolve'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='transient'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='unsettable'
	 *     qualifiers+='!ordered' (ambiguity) qualifiers+='volatile'
	 *     qualifiers+='!readonly' (ambiguity) '}' (('{' (('initial' UnrestrictedName? ':' ';') | ('derivation' UnrestrictedName? ':' ';'))* '}') | ';') (rule end)
	 *     qualifiers+='!readonly' (ambiguity) qualifiers+='!composes'
	 *     qualifiers+='!readonly' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='!readonly' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='!readonly' (ambiguity) qualifiers+='!readonly'
	 *     qualifiers+='!readonly' (ambiguity) qualifiers+='!resolve'
	 *     qualifiers+='!readonly' (ambiguity) qualifiers+='!transient'
	 *     qualifiers+='!readonly' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='!readonly' (ambiguity) qualifiers+='!unsettable'
	 *     qualifiers+='!readonly' (ambiguity) qualifiers+='!volatile'
	 *     qualifiers+='!readonly' (ambiguity) qualifiers+='composes'
	 *     qualifiers+='!readonly' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='!readonly' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='!readonly' (ambiguity) qualifiers+='readonly'
	 *     qualifiers+='!readonly' (ambiguity) qualifiers+='resolve'
	 *     qualifiers+='!readonly' (ambiguity) qualifiers+='transient'
	 *     qualifiers+='!readonly' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='!readonly' (ambiguity) qualifiers+='unsettable'
	 *     qualifiers+='!readonly' (ambiguity) qualifiers+='volatile'
	 *     qualifiers+='!resolve' (ambiguity) '}' (('{' (('initial' UnrestrictedName? ':' ';') | ('derivation' UnrestrictedName? ':' ';'))* '}') | ';') (rule end)
	 *     qualifiers+='!resolve' (ambiguity) qualifiers+='!composes'
	 *     qualifiers+='!resolve' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='!resolve' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='!resolve' (ambiguity) qualifiers+='!readonly'
	 *     qualifiers+='!resolve' (ambiguity) qualifiers+='!resolve'
	 *     qualifiers+='!resolve' (ambiguity) qualifiers+='!transient'
	 *     qualifiers+='!resolve' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='!resolve' (ambiguity) qualifiers+='!unsettable'
	 *     qualifiers+='!resolve' (ambiguity) qualifiers+='!volatile'
	 *     qualifiers+='!resolve' (ambiguity) qualifiers+='composes'
	 *     qualifiers+='!resolve' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='!resolve' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='!resolve' (ambiguity) qualifiers+='readonly'
	 *     qualifiers+='!resolve' (ambiguity) qualifiers+='resolve'
	 *     qualifiers+='!resolve' (ambiguity) qualifiers+='transient'
	 *     qualifiers+='!resolve' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='!resolve' (ambiguity) qualifiers+='unsettable'
	 *     qualifiers+='!resolve' (ambiguity) qualifiers+='volatile'
	 *     qualifiers+='!transient' (ambiguity) '}' (('{' (('initial' UnrestrictedName? ':' ';') | ('derivation' UnrestrictedName? ':' ';'))* '}') | ';') (rule end)
	 *     qualifiers+='!transient' (ambiguity) qualifiers+='!composes'
	 *     qualifiers+='!transient' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='!transient' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='!transient' (ambiguity) qualifiers+='!readonly'
	 *     qualifiers+='!transient' (ambiguity) qualifiers+='!resolve'
	 *     qualifiers+='!transient' (ambiguity) qualifiers+='!transient'
	 *     qualifiers+='!transient' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='!transient' (ambiguity) qualifiers+='!unsettable'
	 *     qualifiers+='!transient' (ambiguity) qualifiers+='!volatile'
	 *     qualifiers+='!transient' (ambiguity) qualifiers+='composes'
	 *     qualifiers+='!transient' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='!transient' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='!transient' (ambiguity) qualifiers+='readonly'
	 *     qualifiers+='!transient' (ambiguity) qualifiers+='resolve'
	 *     qualifiers+='!transient' (ambiguity) qualifiers+='transient'
	 *     qualifiers+='!transient' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='!transient' (ambiguity) qualifiers+='unsettable'
	 *     qualifiers+='!transient' (ambiguity) qualifiers+='volatile'
	 *     qualifiers+='!unique' (ambiguity) '}' (('{' (('initial' UnrestrictedName? ':' ';') | ('derivation' UnrestrictedName? ':' ';'))* '}') | ';') (rule end)
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='!composes'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='!readonly'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='!resolve'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='!transient'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='!unsettable'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='!volatile'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='composes'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='readonly'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='resolve'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='transient'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='unsettable'
	 *     qualifiers+='!unique' (ambiguity) qualifiers+='volatile'
	 *     qualifiers+='!unsettable' (ambiguity) '}' (('{' (('initial' UnrestrictedName? ':' ';') | ('derivation' UnrestrictedName? ':' ';'))* '}') | ';') (rule end)
	 *     qualifiers+='!unsettable' (ambiguity) qualifiers+='!composes'
	 *     qualifiers+='!unsettable' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='!unsettable' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='!unsettable' (ambiguity) qualifiers+='!readonly'
	 *     qualifiers+='!unsettable' (ambiguity) qualifiers+='!resolve'
	 *     qualifiers+='!unsettable' (ambiguity) qualifiers+='!transient'
	 *     qualifiers+='!unsettable' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='!unsettable' (ambiguity) qualifiers+='!unsettable'
	 *     qualifiers+='!unsettable' (ambiguity) qualifiers+='!volatile'
	 *     qualifiers+='!unsettable' (ambiguity) qualifiers+='composes'
	 *     qualifiers+='!unsettable' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='!unsettable' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='!unsettable' (ambiguity) qualifiers+='readonly'
	 *     qualifiers+='!unsettable' (ambiguity) qualifiers+='resolve'
	 *     qualifiers+='!unsettable' (ambiguity) qualifiers+='transient'
	 *     qualifiers+='!unsettable' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='!unsettable' (ambiguity) qualifiers+='unsettable'
	 *     qualifiers+='!unsettable' (ambiguity) qualifiers+='volatile'
	 *     qualifiers+='!volatile' (ambiguity) '}' (('{' (('initial' UnrestrictedName? ':' ';') | ('derivation' UnrestrictedName? ':' ';'))* '}') | ';') (rule end)
	 *     qualifiers+='!volatile' (ambiguity) qualifiers+='!composes'
	 *     qualifiers+='!volatile' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='!volatile' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='!volatile' (ambiguity) qualifiers+='!readonly'
	 *     qualifiers+='!volatile' (ambiguity) qualifiers+='!resolve'
	 *     qualifiers+='!volatile' (ambiguity) qualifiers+='!transient'
	 *     qualifiers+='!volatile' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='!volatile' (ambiguity) qualifiers+='!unsettable'
	 *     qualifiers+='!volatile' (ambiguity) qualifiers+='!volatile'
	 *     qualifiers+='!volatile' (ambiguity) qualifiers+='composes'
	 *     qualifiers+='!volatile' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='!volatile' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='!volatile' (ambiguity) qualifiers+='readonly'
	 *     qualifiers+='!volatile' (ambiguity) qualifiers+='resolve'
	 *     qualifiers+='!volatile' (ambiguity) qualifiers+='transient'
	 *     qualifiers+='!volatile' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='!volatile' (ambiguity) qualifiers+='unsettable'
	 *     qualifiers+='!volatile' (ambiguity) qualifiers+='volatile'
	 *     qualifiers+='composes' (ambiguity) '}' (('{' (('initial' UnrestrictedName? ':' ';') | ('derivation' UnrestrictedName? ':' ';'))* '}') | ';') (rule end)
	 *     qualifiers+='composes' (ambiguity) qualifiers+='!composes'
	 *     qualifiers+='composes' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='composes' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='composes' (ambiguity) qualifiers+='!readonly'
	 *     qualifiers+='composes' (ambiguity) qualifiers+='!resolve'
	 *     qualifiers+='composes' (ambiguity) qualifiers+='!transient'
	 *     qualifiers+='composes' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='composes' (ambiguity) qualifiers+='!unsettable'
	 *     qualifiers+='composes' (ambiguity) qualifiers+='!volatile'
	 *     qualifiers+='composes' (ambiguity) qualifiers+='composes'
	 *     qualifiers+='composes' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='composes' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='composes' (ambiguity) qualifiers+='readonly'
	 *     qualifiers+='composes' (ambiguity) qualifiers+='resolve'
	 *     qualifiers+='composes' (ambiguity) qualifiers+='transient'
	 *     qualifiers+='composes' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='composes' (ambiguity) qualifiers+='unsettable'
	 *     qualifiers+='composes' (ambiguity) qualifiers+='volatile'
	 *     qualifiers+='derived' (ambiguity) '}' (('{' (('initial' UnrestrictedName? ':' ';') | ('derivation' UnrestrictedName? ':' ';'))* '}') | ';') (rule end)
	 *     qualifiers+='derived' (ambiguity) qualifiers+='!composes'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='!readonly'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='!resolve'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='!transient'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='!unsettable'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='!volatile'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='composes'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='readonly'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='resolve'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='transient'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='unsettable'
	 *     qualifiers+='derived' (ambiguity) qualifiers+='volatile'
	 *     qualifiers+='ordered' (ambiguity) '}' (('{' (('initial' UnrestrictedName? ':' ';') | ('derivation' UnrestrictedName? ':' ';'))* '}') | ';') (rule end)
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='!composes'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='!readonly'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='!resolve'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='!transient'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='!unsettable'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='!volatile'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='composes'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='readonly'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='resolve'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='transient'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='unsettable'
	 *     qualifiers+='ordered' (ambiguity) qualifiers+='volatile'
	 *     qualifiers+='readonly' (ambiguity) '}' (('{' (('initial' UnrestrictedName? ':' ';') | ('derivation' UnrestrictedName? ':' ';'))* '}') | ';') (rule end)
	 *     qualifiers+='readonly' (ambiguity) qualifiers+='!composes'
	 *     qualifiers+='readonly' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='readonly' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='readonly' (ambiguity) qualifiers+='!readonly'
	 *     qualifiers+='readonly' (ambiguity) qualifiers+='!resolve'
	 *     qualifiers+='readonly' (ambiguity) qualifiers+='!transient'
	 *     qualifiers+='readonly' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='readonly' (ambiguity) qualifiers+='!unsettable'
	 *     qualifiers+='readonly' (ambiguity) qualifiers+='!volatile'
	 *     qualifiers+='readonly' (ambiguity) qualifiers+='composes'
	 *     qualifiers+='readonly' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='readonly' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='readonly' (ambiguity) qualifiers+='readonly'
	 *     qualifiers+='readonly' (ambiguity) qualifiers+='resolve'
	 *     qualifiers+='readonly' (ambiguity) qualifiers+='transient'
	 *     qualifiers+='readonly' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='readonly' (ambiguity) qualifiers+='unsettable'
	 *     qualifiers+='readonly' (ambiguity) qualifiers+='volatile'
	 *     qualifiers+='resolve' (ambiguity) '}' (('{' (('initial' UnrestrictedName? ':' ';') | ('derivation' UnrestrictedName? ':' ';'))* '}') | ';') (rule end)
	 *     qualifiers+='resolve' (ambiguity) qualifiers+='!composes'
	 *     qualifiers+='resolve' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='resolve' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='resolve' (ambiguity) qualifiers+='!readonly'
	 *     qualifiers+='resolve' (ambiguity) qualifiers+='!resolve'
	 *     qualifiers+='resolve' (ambiguity) qualifiers+='!transient'
	 *     qualifiers+='resolve' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='resolve' (ambiguity) qualifiers+='!unsettable'
	 *     qualifiers+='resolve' (ambiguity) qualifiers+='!volatile'
	 *     qualifiers+='resolve' (ambiguity) qualifiers+='composes'
	 *     qualifiers+='resolve' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='resolve' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='resolve' (ambiguity) qualifiers+='readonly'
	 *     qualifiers+='resolve' (ambiguity) qualifiers+='resolve'
	 *     qualifiers+='resolve' (ambiguity) qualifiers+='transient'
	 *     qualifiers+='resolve' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='resolve' (ambiguity) qualifiers+='unsettable'
	 *     qualifiers+='resolve' (ambiguity) qualifiers+='volatile'
	 *     qualifiers+='transient' (ambiguity) '}' (('{' (('initial' UnrestrictedName? ':' ';') | ('derivation' UnrestrictedName? ':' ';'))* '}') | ';') (rule end)
	 *     qualifiers+='transient' (ambiguity) qualifiers+='!composes'
	 *     qualifiers+='transient' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='transient' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='transient' (ambiguity) qualifiers+='!readonly'
	 *     qualifiers+='transient' (ambiguity) qualifiers+='!resolve'
	 *     qualifiers+='transient' (ambiguity) qualifiers+='!transient'
	 *     qualifiers+='transient' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='transient' (ambiguity) qualifiers+='!unsettable'
	 *     qualifiers+='transient' (ambiguity) qualifiers+='!volatile'
	 *     qualifiers+='transient' (ambiguity) qualifiers+='composes'
	 *     qualifiers+='transient' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='transient' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='transient' (ambiguity) qualifiers+='readonly'
	 *     qualifiers+='transient' (ambiguity) qualifiers+='resolve'
	 *     qualifiers+='transient' (ambiguity) qualifiers+='transient'
	 *     qualifiers+='transient' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='transient' (ambiguity) qualifiers+='unsettable'
	 *     qualifiers+='transient' (ambiguity) qualifiers+='volatile'
	 *     qualifiers+='unique' (ambiguity) '}' (('{' (('initial' UnrestrictedName? ':' ';') | ('derivation' UnrestrictedName? ':' ';'))* '}') | ';') (rule end)
	 *     qualifiers+='unique' (ambiguity) qualifiers+='!composes'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='!readonly'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='!resolve'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='!transient'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='!unsettable'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='!volatile'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='composes'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='readonly'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='resolve'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='transient'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='unsettable'
	 *     qualifiers+='unique' (ambiguity) qualifiers+='volatile'
	 *     qualifiers+='unsettable' (ambiguity) '}' (('{' (('initial' UnrestrictedName? ':' ';') | ('derivation' UnrestrictedName? ':' ';'))* '}') | ';') (rule end)
	 *     qualifiers+='unsettable' (ambiguity) qualifiers+='!composes'
	 *     qualifiers+='unsettable' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='unsettable' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='unsettable' (ambiguity) qualifiers+='!readonly'
	 *     qualifiers+='unsettable' (ambiguity) qualifiers+='!resolve'
	 *     qualifiers+='unsettable' (ambiguity) qualifiers+='!transient'
	 *     qualifiers+='unsettable' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='unsettable' (ambiguity) qualifiers+='!unsettable'
	 *     qualifiers+='unsettable' (ambiguity) qualifiers+='!volatile'
	 *     qualifiers+='unsettable' (ambiguity) qualifiers+='composes'
	 *     qualifiers+='unsettable' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='unsettable' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='unsettable' (ambiguity) qualifiers+='readonly'
	 *     qualifiers+='unsettable' (ambiguity) qualifiers+='resolve'
	 *     qualifiers+='unsettable' (ambiguity) qualifiers+='transient'
	 *     qualifiers+='unsettable' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='unsettable' (ambiguity) qualifiers+='unsettable'
	 *     qualifiers+='unsettable' (ambiguity) qualifiers+='volatile'
	 *     qualifiers+='volatile' (ambiguity) '}' (('{' (('initial' UnrestrictedName? ':' ';') | ('derivation' UnrestrictedName? ':' ';'))* '}') | ';') (rule end)
	 *     qualifiers+='volatile' (ambiguity) qualifiers+='!composes'
	 *     qualifiers+='volatile' (ambiguity) qualifiers+='!derived'
	 *     qualifiers+='volatile' (ambiguity) qualifiers+='!ordered'
	 *     qualifiers+='volatile' (ambiguity) qualifiers+='!readonly'
	 *     qualifiers+='volatile' (ambiguity) qualifiers+='!resolve'
	 *     qualifiers+='volatile' (ambiguity) qualifiers+='!transient'
	 *     qualifiers+='volatile' (ambiguity) qualifiers+='!unique'
	 *     qualifiers+='volatile' (ambiguity) qualifiers+='!unsettable'
	 *     qualifiers+='volatile' (ambiguity) qualifiers+='!volatile'
	 *     qualifiers+='volatile' (ambiguity) qualifiers+='composes'
	 *     qualifiers+='volatile' (ambiguity) qualifiers+='derived'
	 *     qualifiers+='volatile' (ambiguity) qualifiers+='ordered'
	 *     qualifiers+='volatile' (ambiguity) qualifiers+='readonly'
	 *     qualifiers+='volatile' (ambiguity) qualifiers+='resolve'
	 *     qualifiers+='volatile' (ambiguity) qualifiers+='transient'
	 *     qualifiers+='volatile' (ambiguity) qualifiers+='unique'
	 *     qualifiers+='volatile' (ambiguity) qualifiers+='unsettable'
	 *     qualifiers+='volatile' (ambiguity) qualifiers+='volatile'
	 */
	protected void emit_ReferenceCS_CommaKeyword_6_1_1_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     ('{' (('initial' UnrestrictedName? ':' ';') | ('derivation' UnrestrictedName? ':' ';'))* '}') | ';'
	 *
	 * This ambiguous syntax occurs at:
	 *     default=SINGLE_QUOTED_STRING (ambiguity) (rule end)
	 *     name=UnrestrictedName (ambiguity) (rule end)
	 *     ownedType=TypedMultiplicityRefCS (ambiguity) (rule end)
	 *     qualifiers+='!composes' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='!derived' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='!ordered' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='!readonly' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='!resolve' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='!transient' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='!unique' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='!unsettable' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='!volatile' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='composes' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='derived' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='ordered' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='readonly' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='resolve' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='transient' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='unique' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='unsettable' ','? '}' (ambiguity) (rule end)
	 *     qualifiers+='volatile' ','? '}' (ambiguity) (rule end)
	 *     referredOpposite=[Property|UnrestrictedName] (ambiguity) (rule end)
	 */
	protected void emit_ReferenceCS_SemicolonKeyword_7_1_or___LeftCurlyBracketKeyword_7_0_0_____DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4___or___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4____a_RightCurlyBracketKeyword_7_0_2__(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     UnrestrictedName?
	 *
	 * This ambiguous syntax occurs at:
	 *     (
	 *         default=SINGLE_QUOTED_STRING
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         name=UnrestrictedName
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         ownedType=TypedMultiplicityRefCS
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!composes'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!derived'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!ordered'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!readonly'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!resolve'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!transient'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!unique'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!unsettable'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!volatile'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='composes'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='derived'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='ordered'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='readonly'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='resolve'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='transient'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='unique'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='unsettable'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='volatile'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         referredOpposite=[Property|UnrestrictedName]
	 *         '{'
	 *         ('derivation' UnrestrictedName? ':' ';')*
	 *         'initial'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 */
	protected void emit_ReferenceCS_UnrestrictedNameParserRuleCall_7_0_1_0_1_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     UnrestrictedName?
	 *
	 * This ambiguous syntax occurs at:
	 *     (
	 *         default=SINGLE_QUOTED_STRING
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         name=UnrestrictedName
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         ownedType=TypedMultiplicityRefCS
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!composes'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!derived'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!ordered'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!readonly'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!resolve'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!transient'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!unique'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!unsettable'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='!volatile'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='composes'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='derived'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='ordered'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='readonly'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='resolve'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='transient'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='unique'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='unsettable'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         qualifiers+='volatile'
	 *         ','?
	 *         '}'
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 *     (
	 *         referredOpposite=[Property|UnrestrictedName]
	 *         '{'
	 *         ('initial' UnrestrictedName? ':' ';')*
	 *         'derivation'
	 *         (ambiguity)
	 *         ':'
	 *         (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' (ambiguity) ':')*
	 *         ownedDefaultExpressions+=SpecificationCS
	 *     )
	 */
	protected void emit_ReferenceCS_UnrestrictedNameParserRuleCall_7_0_1_1_1_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     ('derivation' UnrestrictedName? ':' ';' ('initial' UnrestrictedName? ':' ';')*)*
	 *
	 * This ambiguous syntax occurs at:
	 *     ownedDefaultExpressions+=SpecificationCS ';' ('initial' UnrestrictedName? ':' ';')* (ambiguity) '}' (rule end)
	 */
	protected void emit_ReferenceCS___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4__a__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     ('derivation' UnrestrictedName? ':' ';')*
	 *
	 * This ambiguous syntax occurs at:
	 *     default=SINGLE_QUOTED_STRING '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     name=UnrestrictedName '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     ownedDefaultExpressions+=SpecificationCS ';' (ambiguity) ('initial' UnrestrictedName? ':' ';' (ambiguity))* '}' (rule end)
	 *     ownedType=TypedMultiplicityRefCS '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!composes' ','? '}' '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!derived' ','? '}' '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!ordered' ','? '}' '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!readonly' ','? '}' '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!resolve' ','? '}' '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!transient' ','? '}' '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!unique' ','? '}' '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!unsettable' ','? '}' '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!volatile' ','? '}' '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='composes' ','? '}' '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='derived' ','? '}' '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='ordered' ','? '}' '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='readonly' ','? '}' '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='resolve' ','? '}' '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='transient' ','? '}' '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='unique' ','? '}' '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='unsettable' ','? '}' '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='volatile' ','? '}' '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     referredOpposite=[Property|UnrestrictedName] '{' (ambiguity) 'initial' UnrestrictedName? ':' (';' (ambiguity) 'initial' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 */
	protected void emit_ReferenceCS___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     (
	  *         ('derivation' UnrestrictedName? ':' (';' 'derivation' UnrestrictedName? ':')*) |
	  *         (
	  *             ('derivation' UnrestrictedName? ':' (';' 'derivation' UnrestrictedName? ':')* ';')?
	  *             ('initial' UnrestrictedName? ':' ';')+
	  *             'derivation'
	  *             UnrestrictedName?
	  *             ':'
	  *             (';' 'derivation' UnrestrictedName? ':')*
	  *             (
	  *                 ';'
	  *                 ('initial' UnrestrictedName? ':' ';')+
	  *                 'derivation'
	  *                 UnrestrictedName?
	  *                 ':'
	  *                 (';' 'derivation' UnrestrictedName? ':')*
	  *             )*
	  *         )
	  *     )
	 *
	 * This ambiguous syntax occurs at:
	 *     ownedDefaultExpressions+=SpecificationCS ';' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 */
	protected void emit_ReferenceCS___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2___SemicolonKeyword_7_0_1_1_4_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2__a___or_____DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2___SemicolonKeyword_7_0_1_1_4_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2__a_SemicolonKeyword_7_0_1_1_4__q___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4__p_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2___SemicolonKeyword_7_0_1_1_4_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2__a___SemicolonKeyword_7_0_1_1_4___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4__p_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2___SemicolonKeyword_7_0_1_1_4_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2__a__a__(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     ('initial' UnrestrictedName? ':' ';' ('derivation' UnrestrictedName? ':' ';')*)*
	 *
	 * This ambiguous syntax occurs at:
	 *     ownedDefaultExpressions+=SpecificationCS ';' ('derivation' UnrestrictedName? ':' ';')* (ambiguity) '}' (rule end)
	 */
	protected void emit_ReferenceCS___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4__a__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     ('initial' UnrestrictedName? ':' ';')*
	 *
	 * This ambiguous syntax occurs at:
	 *     default=SINGLE_QUOTED_STRING '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     name=UnrestrictedName '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     ownedDefaultExpressions+=SpecificationCS ';' (ambiguity) ('derivation' UnrestrictedName? ':' ';' (ambiguity))* '}' (rule end)
	 *     ownedType=TypedMultiplicityRefCS '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!composes' ','? '}' '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!derived' ','? '}' '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!ordered' ','? '}' '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!readonly' ','? '}' '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!resolve' ','? '}' '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!transient' ','? '}' '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!unique' ','? '}' '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!unsettable' ','? '}' '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!volatile' ','? '}' '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='composes' ','? '}' '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='derived' ','? '}' '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='ordered' ','? '}' '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='readonly' ','? '}' '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='resolve' ','? '}' '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='transient' ','? '}' '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='unique' ','? '}' '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='unsettable' ','? '}' '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='volatile' ','? '}' '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 *     referredOpposite=[Property|UnrestrictedName] '{' (ambiguity) 'derivation' UnrestrictedName? ':' (';' (ambiguity) 'derivation' UnrestrictedName? ':')* ownedDefaultExpressions+=SpecificationCS
	 */
	protected void emit_ReferenceCS___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     (
	  *         ('initial' UnrestrictedName? ':' (';' 'initial' UnrestrictedName? ':')*) |
	  *         (
	  *             ('initial' UnrestrictedName? ':' (';' 'initial' UnrestrictedName? ':')* ';')?
	  *             ('derivation' UnrestrictedName? ':' ';')+
	  *             'initial'
	  *             UnrestrictedName?
	  *             ':'
	  *             (';' 'initial' UnrestrictedName? ':')*
	  *             (
	  *                 ';'
	  *                 ('derivation' UnrestrictedName? ':' ';')+
	  *                 'initial'
	  *                 UnrestrictedName?
	  *                 ':'
	  *                 (';' 'initial' UnrestrictedName? ':')*
	  *             )*
	  *         )
	  *     )
	 *
	 * This ambiguous syntax occurs at:
	 *     ownedDefaultExpressions+=SpecificationCS ';' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 */
	protected void emit_ReferenceCS___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2___SemicolonKeyword_7_0_1_0_4_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2__a___or_____InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2___SemicolonKeyword_7_0_1_0_4_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2__a_SemicolonKeyword_7_0_1_0_4__q___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4__p_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2___SemicolonKeyword_7_0_1_0_4_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2__a___SemicolonKeyword_7_0_1_0_4___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4__p_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2___SemicolonKeyword_7_0_1_0_4_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2__a__a__(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')*
	 *
	 * This ambiguous syntax occurs at:
	 *     default=SINGLE_QUOTED_STRING '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     name=UnrestrictedName '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     ownedType=TypedMultiplicityRefCS '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!composes' ','? '}' '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!derived' ','? '}' '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!ordered' ','? '}' '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!readonly' ','? '}' '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!resolve' ','? '}' '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!transient' ','? '}' '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!unique' ','? '}' '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!unsettable' ','? '}' '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!volatile' ','? '}' '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='composes' ','? '}' '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='derived' ','? '}' '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='ordered' ','? '}' '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='readonly' ','? '}' '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='resolve' ','? '}' '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='transient' ','? '}' '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='unique' ','? '}' '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='unsettable' ','? '}' '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='volatile' ','? '}' '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     referredOpposite=[Property|UnrestrictedName] '{' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 */
	protected void emit_ReferenceCS___SemicolonKeyword_7_0_1_0_4___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4__a_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')+
	 *
	 * This ambiguous syntax occurs at:
	 *     ownedDefaultExpressions+=SpecificationCS (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 */
	protected void emit_ReferenceCS___SemicolonKeyword_7_0_1_0_4___DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2_SemicolonKeyword_7_0_1_1_4__a_InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2__p(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')*
	 *
	 * This ambiguous syntax occurs at:
	 *     default=SINGLE_QUOTED_STRING '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     name=UnrestrictedName '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     ownedType=TypedMultiplicityRefCS '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!composes' ','? '}' '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!derived' ','? '}' '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!ordered' ','? '}' '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!readonly' ','? '}' '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!resolve' ','? '}' '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!transient' ','? '}' '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!unique' ','? '}' '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!unsettable' ','? '}' '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='!volatile' ','? '}' '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='composes' ','? '}' '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='derived' ','? '}' '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='ordered' ','? '}' '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='readonly' ','? '}' '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='resolve' ','? '}' '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='transient' ','? '}' '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='unique' ','? '}' '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='unsettable' ','? '}' '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     qualifiers+='volatile' ','? '}' '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 *     referredOpposite=[Property|UnrestrictedName] '{' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':' (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 */
	protected void emit_ReferenceCS___SemicolonKeyword_7_0_1_1_4___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4__a_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')+
	 *
	 * This ambiguous syntax occurs at:
	 *     ownedDefaultExpressions+=SpecificationCS (ambiguity) ownedDefaultExpressions+=SpecificationCS
	 */
	protected void emit_ReferenceCS___SemicolonKeyword_7_0_1_1_4___InitialKeyword_7_0_1_0_0_UnrestrictedNameParserRuleCall_7_0_1_0_1_q_ColonKeyword_7_0_1_0_2_SemicolonKeyword_7_0_1_0_4__a_DerivationKeyword_7_0_1_1_0_UnrestrictedNameParserRuleCall_7_0_1_1_1_q_ColonKeyword_7_0_1_1_2__p(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     ('iterates' '{' '}')?
	 *
	 * This ambiguous syntax occurs at:
	 *     typedModel=[TypedModel|UnrestrictedName] (ambiguity) ';' (rule end)
	 */
	protected void emit_SimpleTargetElementCS___IteratesKeyword_2_0_LeftCurlyBracketKeyword_2_1_1_0_RightCurlyBracketKeyword_2_1_1_2__q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     ('{' '}') | ';'
	 *
	 * This ambiguous syntax occurs at:
	 *     instanceClassName=SINGLE_QUOTED_STRING ('{' '}')? (ambiguity) (rule end)
	 *     isInterface?='interface' '}' (ambiguity) (rule end)
	 *     name=UnrestrictedName ('{' '}')? (ambiguity) (rule end)
	 *     ownedSignature=TemplateSignatureCS ('{' '}')? (ambiguity) (rule end)
	 *     ownedSuperTypes+=TypedRefCS ('{' '}')? (ambiguity) (rule end)
	 */
	protected void emit_StructuredClassCS_SemicolonKeyword_7_1_or___LeftCurlyBracketKeyword_7_0_0_RightCurlyBracketKeyword_7_0_2__(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     ('{' '}')?
	 *
	 * This ambiguous syntax occurs at:
	 *     instanceClassName=SINGLE_QUOTED_STRING (ambiguity) '{' ownedOperations+=OperationCS
	 *     instanceClassName=SINGLE_QUOTED_STRING (ambiguity) '{' ownedProperties+=StructuralFeatureCS
	 *     instanceClassName=SINGLE_QUOTED_STRING (ambiguity) (('{' '}') | ';') (rule end)
	 *     name=UnrestrictedName (ambiguity) '{' ownedOperations+=OperationCS
	 *     name=UnrestrictedName (ambiguity) '{' ownedProperties+=StructuralFeatureCS
	 *     name=UnrestrictedName (ambiguity) (('{' '}') | ';') (rule end)
	 *     ownedSignature=TemplateSignatureCS (ambiguity) '{' ownedOperations+=OperationCS
	 *     ownedSignature=TemplateSignatureCS (ambiguity) '{' ownedProperties+=StructuralFeatureCS
	 *     ownedSignature=TemplateSignatureCS (ambiguity) (('{' '}') | ';') (rule end)
	 *     ownedSuperTypes+=TypedRefCS (ambiguity) '{' ownedOperations+=OperationCS
	 *     ownedSuperTypes+=TypedRefCS (ambiguity) '{' ownedProperties+=StructuralFeatureCS
	 *     ownedSuperTypes+=TypedRefCS (ambiguity) (('{' '}') | ';') (rule end)
	 */
	protected void emit_StructuredClassCS___LeftCurlyBracketKeyword_6_0_RightCurlyBracketKeyword_6_2__q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     ';'?
	 *
	 * This ambiguous syntax occurs at:
	 *     name=UnrestrictedName '{' '}' (ambiguity) (rule end)
	 *     ownedTargetElements+=CompoundTargetElementCS '}' (ambiguity) (rule end)
	 *     ownedTargetElements+=SimpleTargetElementCS '}' (ambiguity) (rule end)
	 */
	protected void emit_TargetCS_SemicolonKeyword_5_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     ('(' ')')?
	 *
	 * This ambiguous syntax occurs at:
	 *     name='Tuple' (ambiguity) (rule end)
	 *     name='Tuple' (ambiguity) ownedMultiplicity=MultiplicityCS
	 */
	protected void emit_TupleTypeCS___LeftParenthesisKeyword_1_0_RightParenthesisKeyword_1_2__q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

}
