/*******************************************************************************
 * Copyright (c) 2011, 2022 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_MapLiteralPartCS_LessThanSignHyphenMinusKeyword_1_1_or_WithKeyword_1_0;
	protected AbstractElementAlias match_MultiplicityCS_VerticalLineQuestionMarkKeyword_2_0_q;
	protected AbstractElementAlias match_NavigatingArgCS_LessThanSignHyphenMinusKeyword_0_1_0_0_1_or_WithKeyword_0_1_0_0_0;
	protected AbstractElementAlias match_NavigatingArgCS_LessThanSignHyphenMinusKeyword_0_1_1_2_0_1_or_WithKeyword_0_1_1_2_0_0;
	protected AbstractElementAlias match_NavigatingArgCS_LessThanSignHyphenMinusKeyword_0_1_2_1_0_1_or_WithKeyword_0_1_2_1_0_0;
	protected AbstractElementAlias match_NavigatingCommaArgCS_LessThanSignHyphenMinusKeyword_2_0_0_1_or_WithKeyword_2_0_0_0;
	protected AbstractElementAlias match_NavigatingCommaArgCS_LessThanSignHyphenMinusKeyword_2_1_2_0_1_or_WithKeyword_2_1_2_0_0;
	protected AbstractElementAlias match_NavigatingCommaArgCS_LessThanSignHyphenMinusKeyword_2_2_1_0_1_or_WithKeyword_2_2_1_0_0;
	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_MapLiteralPartCS_LessThanSignHyphenMinusKeyword_1_1_or_WithKeyword_1_0 = new AlternativeAlias(false, false, new TokenAlias(false, false, grammarAccess.getMapLiteralPartCSAccess().getLessThanSignHyphenMinusKeyword_1_1()), new TokenAlias(false, false, grammarAccess.getMapLiteralPartCSAccess().getWithKeyword_1_0()));
		match_MultiplicityCS_VerticalLineQuestionMarkKeyword_2_0_q = new TokenAlias(false, true, grammarAccess.getMultiplicityCSAccess().getVerticalLineQuestionMarkKeyword_2_0());
		match_NavigatingArgCS_LessThanSignHyphenMinusKeyword_0_1_0_0_1_or_WithKeyword_0_1_0_0_0 = new AlternativeAlias(false, false, new TokenAlias(false, false, grammarAccess.getNavigatingArgCSAccess().getLessThanSignHyphenMinusKeyword_0_1_0_0_1()), new TokenAlias(false, false, grammarAccess.getNavigatingArgCSAccess().getWithKeyword_0_1_0_0_0()));
		match_NavigatingArgCS_LessThanSignHyphenMinusKeyword_0_1_1_2_0_1_or_WithKeyword_0_1_1_2_0_0 = new AlternativeAlias(false, false, new TokenAlias(false, false, grammarAccess.getNavigatingArgCSAccess().getLessThanSignHyphenMinusKeyword_0_1_1_2_0_1()), new TokenAlias(false, false, grammarAccess.getNavigatingArgCSAccess().getWithKeyword_0_1_1_2_0_0()));
		match_NavigatingArgCS_LessThanSignHyphenMinusKeyword_0_1_2_1_0_1_or_WithKeyword_0_1_2_1_0_0 = new AlternativeAlias(false, false, new TokenAlias(false, false, grammarAccess.getNavigatingArgCSAccess().getLessThanSignHyphenMinusKeyword_0_1_2_1_0_1()), new TokenAlias(false, false, grammarAccess.getNavigatingArgCSAccess().getWithKeyword_0_1_2_1_0_0()));
		match_NavigatingCommaArgCS_LessThanSignHyphenMinusKeyword_2_0_0_1_or_WithKeyword_2_0_0_0 = new AlternativeAlias(false, false, new TokenAlias(false, false, grammarAccess.getNavigatingCommaArgCSAccess().getLessThanSignHyphenMinusKeyword_2_0_0_1()), new TokenAlias(false, false, grammarAccess.getNavigatingCommaArgCSAccess().getWithKeyword_2_0_0_0()));
		match_NavigatingCommaArgCS_LessThanSignHyphenMinusKeyword_2_1_2_0_1_or_WithKeyword_2_1_2_0_0 = new AlternativeAlias(false, false, new TokenAlias(false, false, grammarAccess.getNavigatingCommaArgCSAccess().getLessThanSignHyphenMinusKeyword_2_1_2_0_1()), new TokenAlias(false, false, grammarAccess.getNavigatingCommaArgCSAccess().getWithKeyword_2_1_2_0_0()));
		match_NavigatingCommaArgCS_LessThanSignHyphenMinusKeyword_2_2_1_0_1_or_WithKeyword_2_2_1_0_0 = new AlternativeAlias(false, false, new TokenAlias(false, false, grammarAccess.getNavigatingCommaArgCSAccess().getLessThanSignHyphenMinusKeyword_2_2_1_0_1()), new TokenAlias(false, false, grammarAccess.getNavigatingCommaArgCSAccess().getWithKeyword_2_2_1_0_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_MapLiteralPartCS_LessThanSignHyphenMinusKeyword_1_1_or_WithKeyword_1_0.equals(syntax))
				emit_MapLiteralPartCS_LessThanSignHyphenMinusKeyword_1_1_or_WithKeyword_1_0(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_NavigatingArgCS_LessThanSignHyphenMinusKeyword_0_1_0_0_1_or_WithKeyword_0_1_0_0_0.equals(syntax))
				emit_NavigatingArgCS_LessThanSignHyphenMinusKeyword_0_1_0_0_1_or_WithKeyword_0_1_0_0_0(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_NavigatingArgCS_LessThanSignHyphenMinusKeyword_0_1_1_2_0_1_or_WithKeyword_0_1_1_2_0_0.equals(syntax))
				emit_NavigatingArgCS_LessThanSignHyphenMinusKeyword_0_1_1_2_0_1_or_WithKeyword_0_1_1_2_0_0(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_NavigatingArgCS_LessThanSignHyphenMinusKeyword_0_1_2_1_0_1_or_WithKeyword_0_1_2_1_0_0.equals(syntax))
				emit_NavigatingArgCS_LessThanSignHyphenMinusKeyword_0_1_2_1_0_1_or_WithKeyword_0_1_2_1_0_0(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_NavigatingCommaArgCS_LessThanSignHyphenMinusKeyword_2_0_0_1_or_WithKeyword_2_0_0_0.equals(syntax))
				emit_NavigatingCommaArgCS_LessThanSignHyphenMinusKeyword_2_0_0_1_or_WithKeyword_2_0_0_0(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_NavigatingCommaArgCS_LessThanSignHyphenMinusKeyword_2_1_2_0_1_or_WithKeyword_2_1_2_0_0.equals(syntax))
				emit_NavigatingCommaArgCS_LessThanSignHyphenMinusKeyword_2_1_2_0_1_or_WithKeyword_2_1_2_0_0(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_NavigatingCommaArgCS_LessThanSignHyphenMinusKeyword_2_2_1_0_1_or_WithKeyword_2_2_1_0_0.equals(syntax))
				emit_NavigatingCommaArgCS_LessThanSignHyphenMinusKeyword_2_2_1_0_1_or_WithKeyword_2_2_1_0_0(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);
		}
	}

	/**
	 * <pre>
	 * 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'

	 * </pre>
	 */
	protected void emit_AttributeCS_CommaKeyword_5_1_1_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * <pre>
	 * 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)

	 * </pre>
	 */
	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);
	}

	/**
	 * <pre>
	 * 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
	 *     )

	 * </pre>
	 */
	protected void emit_AttributeCS_UnrestrictedNameParserRuleCall_6_0_1_0_1_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * <pre>
	 * 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
	 *     )

	 * </pre>
	 */
	protected void emit_AttributeCS_UnrestrictedNameParserRuleCall_6_0_1_1_1_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * <pre>
	 * Ambiguous syntax:
	 *     ('derivation' UnrestrictedName? ':' ';' ('initial' UnrestrictedName? ':' ';')*)*
	 *
	 * This ambiguous syntax occurs at:
	 *     ownedDefaultExpressions+=SpecificationCS ';' ('initial' UnrestrictedName? ':' ';')* (ambiguity) '}' (rule end)

	 * </pre>
	 */
	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);
	}

	/**
	 * <pre>
	 * 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

	 * </pre>
	 */
	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);
	}

	/**
	 * <pre>
	 * 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

	 * </pre>
	 */
	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);
	}

	/**
	 * <pre>
	 * Ambiguous syntax:
	 *     ('initial' UnrestrictedName? ':' ';' ('derivation' UnrestrictedName? ':' ';')*)*
	 *
	 * This ambiguous syntax occurs at:
	 *     ownedDefaultExpressions+=SpecificationCS ';' ('derivation' UnrestrictedName? ':' ';')* (ambiguity) '}' (rule end)

	 * </pre>
	 */
	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);
	}

	/**
	 * <pre>
	 * 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

	 * </pre>
	 */
	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);
	}

	/**
	 * <pre>
	 * 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

	 * </pre>
	 */
	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);
	}

	/**
	 * <pre>
	 * 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

	 * </pre>
	 */
	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);
	}

	/**
	 * <pre>
	 * Ambiguous syntax:
	 *     (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')+
	 *
	 * This ambiguous syntax occurs at:
	 *     ownedDefaultExpressions+=SpecificationCS (ambiguity) ownedDefaultExpressions+=SpecificationCS

	 * </pre>
	 */
	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);
	}

	/**
	 * <pre>
	 * 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

	 * </pre>
	 */
	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);
	}

	/**
	 * <pre>
	 * Ambiguous syntax:
	 *     (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')+
	 *
	 * This ambiguous syntax occurs at:
	 *     ownedDefaultExpressions+=SpecificationCS (ambiguity) ownedDefaultExpressions+=SpecificationCS

	 * </pre>
	 */
	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);
	}

	/**
	 * <pre>
	 * Ambiguous syntax:
	 *     ';'?
	 *
	 * This ambiguous syntax occurs at:
	 *     (rule start) '{' '}' (ambiguity) (rule start)
	 *     ownedTargetElements+=SimpleTargetElementCS '}' (ambiguity) (rule end)

	 * </pre>
	 */
	protected void emit_CompoundTargetElementCS_SemicolonKeyword_3_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * <pre>
	 * 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)

	 * </pre>
	 */
	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);
	}

	/**
	 * <pre>
	 * 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)

	 * </pre>
	 */
	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);
	}

	/**
	 * <pre>
	 * 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)

	 * </pre>
	 */
	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);
	}

	/**
	 * <pre>
	 * 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)

	 * </pre>
	 */
	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);
	}

	/**
	 * <pre>
	 * Ambiguous syntax:
	 *     ('{' '}') | ';'
	 *
	 * This ambiguous syntax occurs at:
	 *     name=EnumerationLiteralName (ambiguity) (rule end)
	 *     name=UnrestrictedName (ambiguity) (rule end)
	 *     value=SIGNED (ambiguity) (rule end)

	 * </pre>
	 */
	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);
	}

	/**
	 * <pre>
	 * Ambiguous syntax:
	 *     'with' | '<-'
	 *
	 * This ambiguous syntax occurs at:
	 *     ownedKey=ExpCS (ambiguity) ownedValue=ExpCS
	 */
	protected void emit_MapLiteralPartCS_LessThanSignHyphenMinusKeyword_1_1_or_WithKeyword_1_0(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)

	 * </pre>
	 */
	protected void emit_MultiplicityCS_VerticalLineQuestionMarkKeyword_2_0_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * <pre>
	 * Ambiguous syntax:
	 *     'with' | '<-'
	 *
	 * This ambiguous syntax occurs at:
	 *     ownedNameExpression=NavigatingArgExpCS (ambiguity) ownedCoIterator=CoIteratorVariableCS
	 */
	protected void emit_NavigatingArgCS_LessThanSignHyphenMinusKeyword_0_1_0_0_1_or_WithKeyword_0_1_0_0_0(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     'with' | '<-'
	 *
	 * This ambiguous syntax occurs at:
	 *     ownedType=TypeExpCS (ambiguity) ownedCoIterator=CoIteratorVariableCS
	 */
	protected void emit_NavigatingArgCS_LessThanSignHyphenMinusKeyword_0_1_1_2_0_1_or_WithKeyword_0_1_1_2_0_0(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     'with' | '<-'
	 *
	 * This ambiguous syntax occurs at:
	 *     ownedNameExpression=NavigatingArgExpCS (ambiguity) ownedCoIterator=CoIteratorVariableCS
	 *     ownedType=TypeExpCS (ambiguity) ownedCoIterator=CoIteratorVariableCS
	 */
	protected void emit_NavigatingArgCS_LessThanSignHyphenMinusKeyword_0_1_2_1_0_1_or_WithKeyword_0_1_2_1_0_0(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     'with' | '<-'
	 *
	 * This ambiguous syntax occurs at:
	 *     ownedNameExpression=NavigatingArgExpCS (ambiguity) ownedCoIterator=CoIteratorVariableCS
	 */
	protected void emit_NavigatingCommaArgCS_LessThanSignHyphenMinusKeyword_2_0_0_1_or_WithKeyword_2_0_0_0(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     'with' | '<-'
	 *
	 * This ambiguous syntax occurs at:
	 *     ownedType=TypeExpCS (ambiguity) ownedCoIterator=CoIteratorVariableCS
	 */
	protected void emit_NavigatingCommaArgCS_LessThanSignHyphenMinusKeyword_2_1_2_0_1_or_WithKeyword_2_1_2_0_0(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * Ambiguous syntax:
	 *     'with' | '<-'
	 *
	 * This ambiguous syntax occurs at:
	 *     ownedNameExpression=NavigatingArgExpCS (ambiguity) ownedCoIterator=CoIteratorVariableCS
	 *     ownedType=TypeExpCS (ambiguity) ownedCoIterator=CoIteratorVariableCS
	 */
	protected void emit_NavigatingCommaArgCS_LessThanSignHyphenMinusKeyword_2_2_1_0_1_or_WithKeyword_2_2_1_0_0(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'

	 * </pre>
	 */
	protected void emit_OperationCS_CommaKeyword_9_1_1_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * <pre>
	 * 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)

	 * </pre>
	 */
	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);
	}

	/**
	 * <pre>
	 * 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

	 * </pre>
	 */
	protected void emit_OperationCS_UnrestrictedNameParserRuleCall_10_0_1_1_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * <pre>
	 * Ambiguous syntax:
	 *     ('body' UnrestrictedName? ':' ';')*
	 *
	 * This ambiguous syntax occurs at:
	 *     ownedBodyExpressions+=SpecificationCS ';' (ambiguity) '}' (rule end)

	 * </pre>
	 */
	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);
	}

	/**
	 * <pre>
	 * 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

	 * </pre>
	 */
	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);
	}

	/**
	 * <pre>
	 * Ambiguous syntax:
	 *     (';' 'body' UnrestrictedName? ':')+
	 *
	 * This ambiguous syntax occurs at:
	 *     ownedBodyExpressions+=SpecificationCS (ambiguity) ownedBodyExpressions+=SpecificationCS

	 * </pre>
	 */
	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);
	}

	/**
	 * <pre>
	 * 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'

	 * </pre>
	 */
	protected void emit_ParameterCS_CommaKeyword_2_1_1_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * <pre>
	 * 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)

	 * </pre>
	 */
	protected void emit_ParameterCS___LeftCurlyBracketKeyword_3_0_RightCurlyBracketKeyword_3_1__q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * <pre>
	 * 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'

	 * </pre>
	 */
	protected void emit_ReferenceCS_CommaKeyword_6_1_1_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * <pre>
	 * 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)

	 * </pre>
	 */
	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);
	}

	/**
	 * <pre>
	 * 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
	 *     )

	 * </pre>
	 */
	protected void emit_ReferenceCS_UnrestrictedNameParserRuleCall_7_0_1_0_1_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * <pre>
	 * 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
	 *     )

	 * </pre>
	 */
	protected void emit_ReferenceCS_UnrestrictedNameParserRuleCall_7_0_1_1_1_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * <pre>
	 * Ambiguous syntax:
	 *     ('derivation' UnrestrictedName? ':' ';' ('initial' UnrestrictedName? ':' ';')*)*
	 *
	 * This ambiguous syntax occurs at:
	 *     ownedDefaultExpressions+=SpecificationCS ';' ('initial' UnrestrictedName? ':' ';')* (ambiguity) '}' (rule end)

	 * </pre>
	 */
	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);
	}

	/**
	 * <pre>
	 * 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

	 * </pre>
	 */
	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);
	}

	/**
	 * <pre>
	 * 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

	 * </pre>
	 */
	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);
	}

	/**
	 * <pre>
	 * Ambiguous syntax:
	 *     ('initial' UnrestrictedName? ':' ';' ('derivation' UnrestrictedName? ':' ';')*)*
	 *
	 * This ambiguous syntax occurs at:
	 *     ownedDefaultExpressions+=SpecificationCS ';' ('derivation' UnrestrictedName? ':' ';')* (ambiguity) '}' (rule end)

	 * </pre>
	 */
	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);
	}

	/**
	 * <pre>
	 * 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

	 * </pre>
	 */
	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);
	}

	/**
	 * <pre>
	 * 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

	 * </pre>
	 */
	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);
	}

	/**
	 * <pre>
	 * 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

	 * </pre>
	 */
	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);
	}

	/**
	 * <pre>
	 * Ambiguous syntax:
	 *     (';' ('derivation' UnrestrictedName? ':' ';')* 'initial' UnrestrictedName? ':')+
	 *
	 * This ambiguous syntax occurs at:
	 *     ownedDefaultExpressions+=SpecificationCS (ambiguity) ownedDefaultExpressions+=SpecificationCS

	 * </pre>
	 */
	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);
	}

	/**
	 * <pre>
	 * 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

	 * </pre>
	 */
	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);
	}

	/**
	 * <pre>
	 * Ambiguous syntax:
	 *     (';' ('initial' UnrestrictedName? ':' ';')* 'derivation' UnrestrictedName? ':')+
	 *
	 * This ambiguous syntax occurs at:
	 *     ownedDefaultExpressions+=SpecificationCS (ambiguity) ownedDefaultExpressions+=SpecificationCS

	 * </pre>
	 */
	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);
	}

	/**
	 * <pre>
	 * Ambiguous syntax:
	 *     ('iterates' '{' '}')?
	 *
	 * This ambiguous syntax occurs at:
	 *     typedModel=[TypedModel|UnrestrictedName] (ambiguity) ';' (rule end)

	 * </pre>
	 */
	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);
	}

	/**
	 * <pre>
	 * 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)

	 * </pre>
	 */
	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);
	}

	/**
	 * <pre>
	 * 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)

	 * </pre>
	 */
	protected void emit_StructuredClassCS___LeftCurlyBracketKeyword_6_0_RightCurlyBracketKeyword_6_2__q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * <pre>
	 * Ambiguous syntax:
	 *     ';'?
	 *
	 * This ambiguous syntax occurs at:
	 *     name=UnrestrictedName '{' '}' (ambiguity) (rule end)
	 *     ownedTargetElements+=CompoundTargetElementCS '}' (ambiguity) (rule end)
	 *     ownedTargetElements+=SimpleTargetElementCS '}' (ambiguity) (rule end)

	 * </pre>
	 */
	protected void emit_TargetCS_SemicolonKeyword_5_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

	/**
	 * <pre>
	 * Ambiguous syntax:
	 *     ('(' ')')?
	 *
	 * This ambiguous syntax occurs at:
	 *     name='Tuple' (ambiguity) (rule end)
	 *     name='Tuple' (ambiguity) ownedMultiplicity=MultiplicityCS

	 * </pre>
	 */
	protected void emit_TupleTypeCS___LeftParenthesisKeyword_1_0_RightParenthesisKeyword_1_2__q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}

}
