/*******************************************************************************
 * 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.qvtrelation.serializer;

import com.google.inject.Inject;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.qvtd.xtext.qvtrelation.services.QVTrelationGrammarAccess;
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 AbstractQVTrelationSyntacticSequencer extends AbstractSyntacticSequencer {

	protected QVTrelationGrammarAccess 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_CollectionTemplateCS___LeftCurlyBracketKeyword_3_0_RightCurlyBracketKeyword_3_2__q;
	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_DomainCS_ReplaceKeyword_0_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_ModelDeclCS___DependsOnKeyword_3_0_LeftCurlyBracketKeyword_3_1_1_0_RightCurlyBracketKeyword_3_1_1_2__q;
	protected AbstractElementAlias match_ModelDeclCS___IteratesKeyword_4_0_LeftCurlyBracketKeyword_4_1_1_0_RightCurlyBracketKeyword_4_1_1_2__q;
	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_ObjectTemplateCS___LeftCurlyBracketKeyword_3_0_RightCurlyBracketKeyword_3_2__q;
	protected AbstractElementAlias match_OperationCS_CommaKeyword_9_1_1_q;
	protected AbstractElementAlias match_OperationCS_SemicolonKeyword_10_1_or___LeftCurlyBracketKeyword_10_0_0___BodyKeyword_10_0_1_0_UnrestrictedNameParserRuleCall_10_0_1_1_q_ColonKeyword_10_0_1_2_SemicolonKeyword_10_0_1_4__a_RightCurlyBracketKeyword_10_0_2__;
	protected AbstractElementAlias match_OperationCS_UnrestrictedNameParserRuleCall_10_0_1_1_q;
	protected AbstractElementAlias match_OperationCS___BodyKeyword_10_0_1_0_UnrestrictedNameParserRuleCall_10_0_1_1_q_ColonKeyword_10_0_1_2_SemicolonKeyword_10_0_1_4__a;
	protected AbstractElementAlias match_OperationCS___SemicolonKeyword_10_0_1_4_BodyKeyword_10_0_1_0_UnrestrictedNameParserRuleCall_10_0_1_1_q_ColonKeyword_10_0_1_2__a;
	protected AbstractElementAlias match_OperationCS___SemicolonKeyword_10_0_1_4_BodyKeyword_10_0_1_0_UnrestrictedNameParserRuleCall_10_0_1_1_q_ColonKeyword_10_0_1_2__p;
	protected AbstractElementAlias match_ParameterCS_CommaKeyword_2_1_1_q;
	protected AbstractElementAlias match_ParameterCS___LeftCurlyBracketKeyword_3_0_RightCurlyBracketKeyword_3_1__q;
	protected AbstractElementAlias match_QualifiedPackageCS_SemicolonKeyword_5_1_or___LeftCurlyBracketKeyword_5_0_0_RightCurlyBracketKeyword_5_0_2__;
	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 = (QVTrelationGrammarAccess) 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_CollectionTemplateCS___LeftCurlyBracketKeyword_3_0_RightCurlyBracketKeyword_3_2__q = new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getCollectionTemplateCSAccess().getLeftCurlyBracketKeyword_3_0()), new TokenAlias(false, false, grammarAccess.getCollectionTemplateCSAccess().getRightCurlyBracketKeyword_3_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_DomainCS_ReplaceKeyword_0_2_q = new TokenAlias(false, true, grammarAccess.getDomainCSAccess().getReplaceKeyword_0_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_ModelDeclCS___DependsOnKeyword_3_0_LeftCurlyBracketKeyword_3_1_1_0_RightCurlyBracketKeyword_3_1_1_2__q = new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getModelDeclCSAccess().getDependsOnKeyword_3_0()), new TokenAlias(false, false, grammarAccess.getModelDeclCSAccess().getLeftCurlyBracketKeyword_3_1_1_0()), new TokenAlias(false, false, grammarAccess.getModelDeclCSAccess().getRightCurlyBracketKeyword_3_1_1_2()));
		match_ModelDeclCS___IteratesKeyword_4_0_LeftCurlyBracketKeyword_4_1_1_0_RightCurlyBracketKeyword_4_1_1_2__q = new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getModelDeclCSAccess().getIteratesKeyword_4_0()), new TokenAlias(false, false, grammarAccess.getModelDeclCSAccess().getLeftCurlyBracketKeyword_4_1_1_0()), new TokenAlias(false, false, grammarAccess.getModelDeclCSAccess().getRightCurlyBracketKeyword_4_1_1_2()));
		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_ObjectTemplateCS___LeftCurlyBracketKeyword_3_0_RightCurlyBracketKeyword_3_2__q = new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getObjectTemplateCSAccess().getLeftCurlyBracketKeyword_3_0()), new TokenAlias(false, false, grammarAccess.getObjectTemplateCSAccess().getRightCurlyBracketKeyword_3_2()));
		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_QualifiedPackageCS_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.getQualifiedPackageCSAccess().getLeftCurlyBracketKeyword_5_0_0()), new TokenAlias(false, false, grammarAccess.getQualifiedPackageCSAccess().getRightCurlyBracketKeyword_5_0_2())), new TokenAlias(false, false, grammarAccess.getQualifiedPackageCSAccess().getSemicolonKeyword_5_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 "";
	}

	/**
	 * UnrestrictedName returns ecore::EString:
	 * 	EssentialOCLUnrestrictedName
	 * |   QVTbaseUnrestrictedName
	 * |   QVTrelationUnrestrictedName
	 * ;
	 */
	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_CollectionTemplateCS___LeftCurlyBracketKeyword_3_0_RightCurlyBracketKeyword_3_2__q.equals(syntax))
				emit_CollectionTemplateCS___LeftCurlyBracketKeyword_3_0_RightCurlyBracketKeyword_3_2__q(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_DomainCS_ReplaceKeyword_0_2_q.equals(syntax))
				emit_DomainCS_ReplaceKeyword_0_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_ModelDeclCS___DependsOnKeyword_3_0_LeftCurlyBracketKeyword_3_1_1_0_RightCurlyBracketKeyword_3_1_1_2__q.equals(syntax))
				emit_ModelDeclCS___DependsOnKeyword_3_0_LeftCurlyBracketKeyword_3_1_1_0_RightCurlyBracketKeyword_3_1_1_2__q(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_ModelDeclCS___IteratesKeyword_4_0_LeftCurlyBracketKeyword_4_1_1_0_RightCurlyBracketKeyword_4_1_1_2__q.equals(syntax))
				emit_ModelDeclCS___IteratesKeyword_4_0_LeftCurlyBracketKeyword_4_1_1_0_RightCurlyBracketKeyword_4_1_1_2__q(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_ObjectTemplateCS___LeftCurlyBracketKeyword_3_0_RightCurlyBracketKeyword_3_2__q.equals(syntax))
				emit_ObjectTemplateCS___LeftCurlyBracketKeyword_3_0_RightCurlyBracketKeyword_3_2__q(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_OperationCS_CommaKeyword_9_1_1_q.equals(syntax))
				emit_OperationCS_CommaKeyword_9_1_1_q(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_OperationCS_SemicolonKeyword_10_1_or___LeftCurlyBracketKeyword_10_0_0___BodyKeyword_10_0_1_0_UnrestrictedNameParserRuleCall_10_0_1_1_q_ColonKeyword_10_0_1_2_SemicolonKeyword_10_0_1_4__a_RightCurlyBracketKeyword_10_0_2__.equals(syntax))
				emit_OperationCS_SemicolonKeyword_10_1_or___LeftCurlyBracketKeyword_10_0_0___BodyKeyword_10_0_1_0_UnrestrictedNameParserRuleCall_10_0_1_1_q_ColonKeyword_10_0_1_2_SemicolonKeyword_10_0_1_4__a_RightCurlyBracketKeyword_10_0_2__(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_OperationCS_UnrestrictedNameParserRuleCall_10_0_1_1_q.equals(syntax))
				emit_OperationCS_UnrestrictedNameParserRuleCall_10_0_1_1_q(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_OperationCS___BodyKeyword_10_0_1_0_UnrestrictedNameParserRuleCall_10_0_1_1_q_ColonKeyword_10_0_1_2_SemicolonKeyword_10_0_1_4__a.equals(syntax))
				emit_OperationCS___BodyKeyword_10_0_1_0_UnrestrictedNameParserRuleCall_10_0_1_1_q_ColonKeyword_10_0_1_2_SemicolonKeyword_10_0_1_4__a(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_OperationCS___SemicolonKeyword_10_0_1_4_BodyKeyword_10_0_1_0_UnrestrictedNameParserRuleCall_10_0_1_1_q_ColonKeyword_10_0_1_2__a.equals(syntax))
				emit_OperationCS___SemicolonKeyword_10_0_1_4_BodyKeyword_10_0_1_0_UnrestrictedNameParserRuleCall_10_0_1_1_q_ColonKeyword_10_0_1_2__a(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_OperationCS___SemicolonKeyword_10_0_1_4_BodyKeyword_10_0_1_0_UnrestrictedNameParserRuleCall_10_0_1_1_q_ColonKeyword_10_0_1_2__p.equals(syntax))
				emit_OperationCS___SemicolonKeyword_10_0_1_4_BodyKeyword_10_0_1_0_UnrestrictedNameParserRuleCall_10_0_1_1_q_ColonKeyword_10_0_1_2__p(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_ParameterCS_CommaKeyword_2_1_1_q.equals(syntax))
				emit_ParameterCS_CommaKeyword_2_1_1_q(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_ParameterCS___LeftCurlyBracketKeyword_3_0_RightCurlyBracketKeyword_3_1__q.equals(syntax))
				emit_ParameterCS___LeftCurlyBracketKeyword_3_0_RightCurlyBracketKeyword_3_1__q(semanticObject, getLastNavigableState(), syntaxNodes);
			else if (match_QualifiedPackageCS_SemicolonKeyword_5_1_or___LeftCurlyBracketKeyword_5_0_0_RightCurlyBracketKeyword_5_0_2__.equals(syntax))
				emit_QualifiedPackageCS_SemicolonKeyword_5_1_or___LeftCurlyBracketKeyword_5_0_0_RightCurlyBracketKeyword_5_0_2__(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:
	 *     ownedType=CollectionTypeCS (ambiguity) '{' ownedGuardExpression=ExpCS
	 *     ownedType=CollectionTypeCS (ambiguity) (rule end)

	 * </pre>
	 */
	protected void emit_CollectionTemplateCS___LeftCurlyBracketKeyword_3_0_RightCurlyBracketKeyword_3_2__q(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:
	 *     'replace'?
	 *
	 * This ambiguous syntax occurs at:
	 *     (rule start) (ambiguity) 'domain' modelId=[TypedModel|UnrestrictedName]

	 * </pre>
	 */
	protected void emit_DomainCS_ReplaceKeyword_0_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:
	 *     ('dependsOn' '{' '}')?
	 *
	 * This ambiguous syntax occurs at:
	 *     metamodelIds+=[Namespace|UnrestrictedName] '}' (ambiguity) 'iterates' '{' iterates+=[TypedModel|UnrestrictedName]
	 *     metamodelIds+=[Namespace|UnrestrictedName] '}' (ambiguity) 'iterates' iterates+=[TypedModel|UnrestrictedName]
	 *     metamodelIds+=[Namespace|UnrestrictedName] '}' (ambiguity) ('iterates' '{' '}')? (rule end)
	 *     metamodelIds+=[Namespace|UnrestrictedName] (ambiguity) 'iterates' '{' iterates+=[TypedModel|UnrestrictedName]
	 *     metamodelIds+=[Namespace|UnrestrictedName] (ambiguity) 'iterates' iterates+=[TypedModel|UnrestrictedName]
	 *     metamodelIds+=[Namespace|UnrestrictedName] (ambiguity) ('iterates' '{' '}')? (rule end)

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

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

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

	/**
	 * <pre>
	 * 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:
	 *     ownedType=TypedRefCS (ambiguity) '{' ownedGuardExpression=ExpCS
	 *     ownedType=TypedRefCS (ambiguity) (rule end)

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

	/**
	 * <pre>
	 * 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:
	 *     name=UnrestrictedName (ambiguity) (rule end)
	 *     nsPrefix=UnrestrictedName (ambiguity) (rule end)
	 *     nsURI=URI (ambiguity) (rule end)

	 * </pre>
	 */
	protected void emit_QualifiedPackageCS_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:
	 *     ','?
	 *
	 * 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);
	}

}
