/*
 * generated by Xtext 2.10.0
 */
grammar InternalMiniOCLCS;

options {
	superClass=AbstractInternalContentAssistParser;
	backtrack=true;
}

@lexer::header {
package org.eclipse.qvtd.doc.ide.contentassist.antlr.internal;

// Hack: Use our own Lexer superclass by means of import. 
// Currently there is no other way to specify the superclass for the lexer.
import org.eclipse.xtext.ide.editor.contentassist.antlr.internal.Lexer;
}

@parser::header {
package org.eclipse.qvtd.doc.ide.contentassist.antlr.internal;

import java.io.InputStream;
import org.eclipse.xtext.*;
import org.eclipse.xtext.parser.*;
import org.eclipse.xtext.parser.impl.*;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.parser.antlr.XtextTokenStream;
import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
import org.eclipse.xtext.ide.editor.contentassist.antlr.internal.AbstractInternalContentAssistParser;
import org.eclipse.xtext.ide.editor.contentassist.antlr.internal.DFA;
import org.eclipse.qvtd.doc.services.MiniOCLCSGrammarAccess;

}
@parser::members {
	private MiniOCLCSGrammarAccess grammarAccess;

	public void setGrammarAccess(MiniOCLCSGrammarAccess grammarAccess) {
		this.grammarAccess = grammarAccess;
	}

	@Override
	protected Grammar getGrammar() {
		return grammarAccess.getGrammar();
	}

	@Override
	protected String getValueForTokenName(String tokenName) {
		return tokenName;
	}
}

// Entry rule entryRuleRootCS
entryRuleRootCS
:
{ before(grammarAccess.getRootCSRule()); }
	 ruleRootCS
{ after(grammarAccess.getRootCSRule()); } 
	 EOF 
;

// Rule RootCS
ruleRootCS 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getRootCSAccess().getGroup()); }
		(rule__RootCS__Group__0)
		{ after(grammarAccess.getRootCSAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleImportCS
entryRuleImportCS
:
{ before(grammarAccess.getImportCSRule()); }
	 ruleImportCS
{ after(grammarAccess.getImportCSRule()); } 
	 EOF 
;

// Rule ImportCS
ruleImportCS 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getImportCSAccess().getGroup()); }
		(rule__ImportCS__Group__0)
		{ after(grammarAccess.getImportCSAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRulePackageCS
entryRulePackageCS
:
{ before(grammarAccess.getPackageCSRule()); }
	 rulePackageCS
{ after(grammarAccess.getPackageCSRule()); } 
	 EOF 
;

// Rule PackageCS
rulePackageCS 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getPackageCSAccess().getGroup()); }
		(rule__PackageCS__Group__0)
		{ after(grammarAccess.getPackageCSAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleClassCS
entryRuleClassCS
:
{ before(grammarAccess.getClassCSRule()); }
	 ruleClassCS
{ after(grammarAccess.getClassCSRule()); } 
	 EOF 
;

// Rule ClassCS
ruleClassCS 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getClassCSAccess().getGroup()); }
		(rule__ClassCS__Group__0)
		{ after(grammarAccess.getClassCSAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRulePropertyCS
entryRulePropertyCS
:
{ before(grammarAccess.getPropertyCSRule()); }
	 rulePropertyCS
{ after(grammarAccess.getPropertyCSRule()); } 
	 EOF 
;

// Rule PropertyCS
rulePropertyCS 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getPropertyCSAccess().getGroup()); }
		(rule__PropertyCS__Group__0)
		{ after(grammarAccess.getPropertyCSAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleMultiplicityCS
entryRuleMultiplicityCS
:
{ before(grammarAccess.getMultiplicityCSRule()); }
	 ruleMultiplicityCS
{ after(grammarAccess.getMultiplicityCSRule()); } 
	 EOF 
;

// Rule MultiplicityCS
ruleMultiplicityCS 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getMultiplicityCSAccess().getGroup()); }
		(rule__MultiplicityCS__Group__0)
		{ after(grammarAccess.getMultiplicityCSAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleOperationCS
entryRuleOperationCS
:
{ before(grammarAccess.getOperationCSRule()); }
	 ruleOperationCS
{ after(grammarAccess.getOperationCSRule()); } 
	 EOF 
;

// Rule OperationCS
ruleOperationCS 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getOperationCSAccess().getGroup()); }
		(rule__OperationCS__Group__0)
		{ after(grammarAccess.getOperationCSAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleParameterCS
entryRuleParameterCS
:
{ before(grammarAccess.getParameterCSRule()); }
	 ruleParameterCS
{ after(grammarAccess.getParameterCSRule()); } 
	 EOF 
;

// Rule ParameterCS
ruleParameterCS 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getParameterCSAccess().getGroup()); }
		(rule__ParameterCS__Group__0)
		{ after(grammarAccess.getParameterCSAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleConstraintsDefCS
entryRuleConstraintsDefCS
:
{ before(grammarAccess.getConstraintsDefCSRule()); }
	 ruleConstraintsDefCS
{ after(grammarAccess.getConstraintsDefCSRule()); } 
	 EOF 
;

// Rule ConstraintsDefCS
ruleConstraintsDefCS 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getConstraintsDefCSAccess().getGroup()); }
		(rule__ConstraintsDefCS__Group__0)
		{ after(grammarAccess.getConstraintsDefCSAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleInvariantCS
entryRuleInvariantCS
:
{ before(grammarAccess.getInvariantCSRule()); }
	 ruleInvariantCS
{ after(grammarAccess.getInvariantCSRule()); } 
	 EOF 
;

// Rule InvariantCS
ruleInvariantCS 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getInvariantCSAccess().getGroup()); }
		(rule__InvariantCS__Group__0)
		{ after(grammarAccess.getInvariantCSAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleExpCS
entryRuleExpCS
:
{ before(grammarAccess.getExpCSRule()); }
	 ruleExpCS
{ after(grammarAccess.getExpCSRule()); } 
	 EOF 
;

// Rule ExpCS
ruleExpCS 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getExpCSAccess().getEqualityExpCSParserRuleCall()); }
		ruleEqualityExpCS
		{ after(grammarAccess.getExpCSAccess().getEqualityExpCSParserRuleCall()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleEqualityExpCS
entryRuleEqualityExpCS
:
{ before(grammarAccess.getEqualityExpCSRule()); }
	 ruleEqualityExpCS
{ after(grammarAccess.getEqualityExpCSRule()); } 
	 EOF 
;

// Rule EqualityExpCS
ruleEqualityExpCS 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getEqualityExpCSAccess().getGroup()); }
		(rule__EqualityExpCS__Group__0)
		{ after(grammarAccess.getEqualityExpCSAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleCallExpCS
entryRuleCallExpCS
:
{ before(grammarAccess.getCallExpCSRule()); }
	 ruleCallExpCS
{ after(grammarAccess.getCallExpCSRule()); } 
	 EOF 
;

// Rule CallExpCS
ruleCallExpCS 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getCallExpCSAccess().getGroup()); }
		(rule__CallExpCS__Group__0)
		{ after(grammarAccess.getCallExpCSAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRulePrimaryExpCS
entryRulePrimaryExpCS
:
{ before(grammarAccess.getPrimaryExpCSRule()); }
	 rulePrimaryExpCS
{ after(grammarAccess.getPrimaryExpCSRule()); } 
	 EOF 
;

// Rule PrimaryExpCS
rulePrimaryExpCS 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getPrimaryExpCSAccess().getAlternatives()); }
		(rule__PrimaryExpCS__Alternatives)
		{ after(grammarAccess.getPrimaryExpCSAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleSelfExpCS
entryRuleSelfExpCS
:
{ before(grammarAccess.getSelfExpCSRule()); }
	 ruleSelfExpCS
{ after(grammarAccess.getSelfExpCSRule()); } 
	 EOF 
;

// Rule SelfExpCS
ruleSelfExpCS 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getSelfExpCSAccess().getGroup()); }
		(rule__SelfExpCS__Group__0)
		{ after(grammarAccess.getSelfExpCSAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleNavigationExpCS
entryRuleNavigationExpCS
:
{ before(grammarAccess.getNavigationExpCSRule()); }
	 ruleNavigationExpCS
{ after(grammarAccess.getNavigationExpCSRule()); } 
	 EOF 
;

// Rule NavigationExpCS
ruleNavigationExpCS 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getNavigationExpCSAccess().getAlternatives()); }
		(rule__NavigationExpCS__Alternatives)
		{ after(grammarAccess.getNavigationExpCSAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleLoopExpCS
entryRuleLoopExpCS
:
{ before(grammarAccess.getLoopExpCSRule()); }
	 ruleLoopExpCS
{ after(grammarAccess.getLoopExpCSRule()); } 
	 EOF 
;

// Rule LoopExpCS
ruleLoopExpCS 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getLoopExpCSAccess().getAlternatives()); }
		(rule__LoopExpCS__Alternatives)
		{ after(grammarAccess.getLoopExpCSAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleCollectExpCS
entryRuleCollectExpCS
:
{ before(grammarAccess.getCollectExpCSRule()); }
	 ruleCollectExpCS
{ after(grammarAccess.getCollectExpCSRule()); } 
	 EOF 
;

// Rule CollectExpCS
ruleCollectExpCS 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getCollectExpCSAccess().getGroup()); }
		(rule__CollectExpCS__Group__0)
		{ after(grammarAccess.getCollectExpCSAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleIteratorVarCS
entryRuleIteratorVarCS
:
{ before(grammarAccess.getIteratorVarCSRule()); }
	 ruleIteratorVarCS
{ after(grammarAccess.getIteratorVarCSRule()); } 
	 EOF 
;

// Rule IteratorVarCS
ruleIteratorVarCS 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getIteratorVarCSAccess().getGroup()); }
		(rule__IteratorVarCS__Group__0)
		{ after(grammarAccess.getIteratorVarCSAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleIterateExpCS
entryRuleIterateExpCS
:
{ before(grammarAccess.getIterateExpCSRule()); }
	 ruleIterateExpCS
{ after(grammarAccess.getIterateExpCSRule()); } 
	 EOF 
;

// Rule IterateExpCS
ruleIterateExpCS 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getIterateExpCSAccess().getGroup()); }
		(rule__IterateExpCS__Group__0)
		{ after(grammarAccess.getIterateExpCSAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleAccVarCS
entryRuleAccVarCS
:
{ before(grammarAccess.getAccVarCSRule()); }
	 ruleAccVarCS
{ after(grammarAccess.getAccVarCSRule()); } 
	 EOF 
;

// Rule AccVarCS
ruleAccVarCS 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getAccVarCSAccess().getGroup()); }
		(rule__AccVarCS__Group__0)
		{ after(grammarAccess.getAccVarCSAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleNameExpCS
entryRuleNameExpCS
:
{ before(grammarAccess.getNameExpCSRule()); }
	 ruleNameExpCS
{ after(grammarAccess.getNameExpCSRule()); } 
	 EOF 
;

// Rule NameExpCS
ruleNameExpCS 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getNameExpCSAccess().getGroup()); }
		(rule__NameExpCS__Group__0)
		{ after(grammarAccess.getNameExpCSAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleRoundedBracketClauseCS
entryRuleRoundedBracketClauseCS
:
{ before(grammarAccess.getRoundedBracketClauseCSRule()); }
	 ruleRoundedBracketClauseCS
{ after(grammarAccess.getRoundedBracketClauseCSRule()); } 
	 EOF 
;

// Rule RoundedBracketClauseCS
ruleRoundedBracketClauseCS 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getRoundedBracketClauseCSAccess().getGroup()); }
		(rule__RoundedBracketClauseCS__Group__0)
		{ after(grammarAccess.getRoundedBracketClauseCSAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleLiteralExpCS
entryRuleLiteralExpCS
:
{ before(grammarAccess.getLiteralExpCSRule()); }
	 ruleLiteralExpCS
{ after(grammarAccess.getLiteralExpCSRule()); } 
	 EOF 
;

// Rule LiteralExpCS
ruleLiteralExpCS 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getLiteralExpCSAccess().getAlternatives()); }
		(rule__LiteralExpCS__Alternatives)
		{ after(grammarAccess.getLiteralExpCSAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleIntLiteralExpCS
entryRuleIntLiteralExpCS
:
{ before(grammarAccess.getIntLiteralExpCSRule()); }
	 ruleIntLiteralExpCS
{ after(grammarAccess.getIntLiteralExpCSRule()); } 
	 EOF 
;

// Rule IntLiteralExpCS
ruleIntLiteralExpCS 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getIntLiteralExpCSAccess().getIntSymbolAssignment()); }
		(rule__IntLiteralExpCS__IntSymbolAssignment)
		{ after(grammarAccess.getIntLiteralExpCSAccess().getIntSymbolAssignment()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleBooleanLiteralExpCS
entryRuleBooleanLiteralExpCS
:
{ before(grammarAccess.getBooleanLiteralExpCSRule()); }
	 ruleBooleanLiteralExpCS
{ after(grammarAccess.getBooleanLiteralExpCSRule()); } 
	 EOF 
;

// Rule BooleanLiteralExpCS
ruleBooleanLiteralExpCS 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getBooleanLiteralExpCSAccess().getGroup()); }
		(rule__BooleanLiteralExpCS__Group__0)
		{ after(grammarAccess.getBooleanLiteralExpCSAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleNullLiteralExpCS
entryRuleNullLiteralExpCS
:
{ before(grammarAccess.getNullLiteralExpCSRule()); }
	 ruleNullLiteralExpCS
{ after(grammarAccess.getNullLiteralExpCSRule()); } 
	 EOF 
;

// Rule NullLiteralExpCS
ruleNullLiteralExpCS 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getNullLiteralExpCSAccess().getGroup()); }
		(rule__NullLiteralExpCS__Group__0)
		{ after(grammarAccess.getNullLiteralExpCSAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleCollectionLiteralExpCS
entryRuleCollectionLiteralExpCS
:
{ before(grammarAccess.getCollectionLiteralExpCSRule()); }
	 ruleCollectionLiteralExpCS
{ after(grammarAccess.getCollectionLiteralExpCSRule()); } 
	 EOF 
;

// Rule CollectionLiteralExpCS
ruleCollectionLiteralExpCS 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getCollectionLiteralExpCSAccess().getGroup()); }
		(rule__CollectionLiteralExpCS__Group__0)
		{ after(grammarAccess.getCollectionLiteralExpCSAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleCollectionLiteralPartCS
entryRuleCollectionLiteralPartCS
:
{ before(grammarAccess.getCollectionLiteralPartCSRule()); }
	 ruleCollectionLiteralPartCS
{ after(grammarAccess.getCollectionLiteralPartCSRule()); } 
	 EOF 
;

// Rule CollectionLiteralPartCS
ruleCollectionLiteralPartCS 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getCollectionLiteralPartCSAccess().getGroup()); }
		(rule__CollectionLiteralPartCS__Group__0)
		{ after(grammarAccess.getCollectionLiteralPartCSAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleLetExpCS
entryRuleLetExpCS
:
{ before(grammarAccess.getLetExpCSRule()); }
	 ruleLetExpCS
{ after(grammarAccess.getLetExpCSRule()); } 
	 EOF 
;

// Rule LetExpCS
ruleLetExpCS 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getLetExpCSAccess().getGroup()); }
		(rule__LetExpCS__Group__0)
		{ after(grammarAccess.getLetExpCSAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleLetVarCS
entryRuleLetVarCS
:
{ before(grammarAccess.getLetVarCSRule()); }
	 ruleLetVarCS
{ after(grammarAccess.getLetVarCSRule()); } 
	 EOF 
;

// Rule LetVarCS
ruleLetVarCS 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getLetVarCSAccess().getGroup()); }
		(rule__LetVarCS__Group__0)
		{ after(grammarAccess.getLetVarCSAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRulePathNameCS
entryRulePathNameCS
:
{ before(grammarAccess.getPathNameCSRule()); }
	 rulePathNameCS
{ after(grammarAccess.getPathNameCSRule()); } 
	 EOF 
;

// Rule PathNameCS
rulePathNameCS 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getPathNameCSAccess().getGroup()); }
		(rule__PathNameCS__Group__0)
		{ after(grammarAccess.getPathNameCSAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRulePathElementCS
entryRulePathElementCS
:
{ before(grammarAccess.getPathElementCSRule()); }
	 rulePathElementCS
{ after(grammarAccess.getPathElementCSRule()); } 
	 EOF 
;

// Rule PathElementCS
rulePathElementCS 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getPathElementCSAccess().getElementNameAssignment()); }
		(rule__PathElementCS__ElementNameAssignment)
		{ after(grammarAccess.getPathElementCSAccess().getElementNameAssignment()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Rule CollectionKindCS
ruleCollectionKindCS
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getCollectionKindCSAccess().getCollectionEnumLiteralDeclaration()); }
		('Collection')
		{ after(grammarAccess.getCollectionKindCSAccess().getCollectionEnumLiteralDeclaration()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__RootCS__Alternatives_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getRootCSAccess().getPackagesAssignment_1_0()); }
		(rule__RootCS__PackagesAssignment_1_0)
		{ after(grammarAccess.getRootCSAccess().getPackagesAssignment_1_0()); }
	)
	|
	(
		{ before(grammarAccess.getRootCSAccess().getConstraintsAssignment_1_1()); }
		(rule__RootCS__ConstraintsAssignment_1_1)
		{ after(grammarAccess.getRootCSAccess().getConstraintsAssignment_1_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__PackageCS__Alternatives_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getPackageCSAccess().getPackagesAssignment_3_0()); }
		(rule__PackageCS__PackagesAssignment_3_0)
		{ after(grammarAccess.getPackageCSAccess().getPackagesAssignment_3_0()); }
	)
	|
	(
		{ before(grammarAccess.getPackageCSAccess().getClassesAssignment_3_1()); }
		(rule__PackageCS__ClassesAssignment_3_1)
		{ after(grammarAccess.getPackageCSAccess().getClassesAssignment_3_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__ClassCS__Alternatives_4
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getClassCSAccess().getPropertiesAssignment_4_0()); }
		(rule__ClassCS__PropertiesAssignment_4_0)
		{ after(grammarAccess.getClassCSAccess().getPropertiesAssignment_4_0()); }
	)
	|
	(
		{ before(grammarAccess.getClassCSAccess().getOperationsAssignment_4_1()); }
		(rule__ClassCS__OperationsAssignment_4_1)
		{ after(grammarAccess.getClassCSAccess().getOperationsAssignment_4_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__MultiplicityCS__Alternatives_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getMultiplicityCSAccess().getOptAssignment_1_0()); }
		(rule__MultiplicityCS__OptAssignment_1_0)
		{ after(grammarAccess.getMultiplicityCSAccess().getOptAssignment_1_0()); }
	)
	|
	(
		{ before(grammarAccess.getMultiplicityCSAccess().getMultAssignment_1_1()); }
		(rule__MultiplicityCS__MultAssignment_1_1)
		{ after(grammarAccess.getMultiplicityCSAccess().getMultAssignment_1_1()); }
	)
	|
	(
		{ before(grammarAccess.getMultiplicityCSAccess().getMandatoryAssignment_1_2()); }
		(rule__MultiplicityCS__MandatoryAssignment_1_2)
		{ after(grammarAccess.getMultiplicityCSAccess().getMandatoryAssignment_1_2()); }
	)
	|
	(
		{ before(grammarAccess.getMultiplicityCSAccess().getGroup_1_3()); }
		(rule__MultiplicityCS__Group_1_3__0)
		{ after(grammarAccess.getMultiplicityCSAccess().getGroup_1_3()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__MultiplicityCS__Alternatives_1_3_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getMultiplicityCSAccess().getUpperIntAssignment_1_3_2_0()); }
		(rule__MultiplicityCS__UpperIntAssignment_1_3_2_0)
		{ after(grammarAccess.getMultiplicityCSAccess().getUpperIntAssignment_1_3_2_0()); }
	)
	|
	(
		{ before(grammarAccess.getMultiplicityCSAccess().getUpperMultAssignment_1_3_2_1()); }
		(rule__MultiplicityCS__UpperMultAssignment_1_3_2_1)
		{ after(grammarAccess.getMultiplicityCSAccess().getUpperMultAssignment_1_3_2_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EqualityExpCS__OpNameAlternatives_1_1_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEqualityExpCSAccess().getOpNameEqualsSignKeyword_1_1_0_0()); }
		'='
		{ after(grammarAccess.getEqualityExpCSAccess().getOpNameEqualsSignKeyword_1_1_0_0()); }
	)
	|
	(
		{ before(grammarAccess.getEqualityExpCSAccess().getOpNameLessThanSignGreaterThanSignKeyword_1_1_0_1()); }
		'<>'
		{ after(grammarAccess.getEqualityExpCSAccess().getOpNameLessThanSignGreaterThanSignKeyword_1_1_0_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__CallExpCS__OpNameAlternatives_1_1_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getCallExpCSAccess().getOpNameFullStopKeyword_1_1_0_0()); }
		'.'
		{ after(grammarAccess.getCallExpCSAccess().getOpNameFullStopKeyword_1_1_0_0()); }
	)
	|
	(
		{ before(grammarAccess.getCallExpCSAccess().getOpNameHyphenMinusGreaterThanSignKeyword_1_1_0_1()); }
		'->'
		{ after(grammarAccess.getCallExpCSAccess().getOpNameHyphenMinusGreaterThanSignKeyword_1_1_0_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__PrimaryExpCS__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getPrimaryExpCSAccess().getSelfExpCSParserRuleCall_0()); }
		ruleSelfExpCS
		{ after(grammarAccess.getPrimaryExpCSAccess().getSelfExpCSParserRuleCall_0()); }
	)
	|
	(
		{ before(grammarAccess.getPrimaryExpCSAccess().getNameExpCSParserRuleCall_1()); }
		ruleNameExpCS
		{ after(grammarAccess.getPrimaryExpCSAccess().getNameExpCSParserRuleCall_1()); }
	)
	|
	(
		{ before(grammarAccess.getPrimaryExpCSAccess().getLiteralExpCSParserRuleCall_2()); }
		ruleLiteralExpCS
		{ after(grammarAccess.getPrimaryExpCSAccess().getLiteralExpCSParserRuleCall_2()); }
	)
	|
	(
		{ before(grammarAccess.getPrimaryExpCSAccess().getLetExpCSParserRuleCall_3()); }
		ruleLetExpCS
		{ after(grammarAccess.getPrimaryExpCSAccess().getLetExpCSParserRuleCall_3()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__NavigationExpCS__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getNavigationExpCSAccess().getLoopExpCSParserRuleCall_0()); }
		ruleLoopExpCS
		{ after(grammarAccess.getNavigationExpCSAccess().getLoopExpCSParserRuleCall_0()); }
	)
	|
	(
		{ before(grammarAccess.getNavigationExpCSAccess().getNameExpCSParserRuleCall_1()); }
		ruleNameExpCS
		{ after(grammarAccess.getNavigationExpCSAccess().getNameExpCSParserRuleCall_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__LoopExpCS__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getLoopExpCSAccess().getCollectExpCSParserRuleCall_0()); }
		ruleCollectExpCS
		{ after(grammarAccess.getLoopExpCSAccess().getCollectExpCSParserRuleCall_0()); }
	)
	|
	(
		{ before(grammarAccess.getLoopExpCSAccess().getIterateExpCSParserRuleCall_1()); }
		ruleIterateExpCS
		{ after(grammarAccess.getLoopExpCSAccess().getIterateExpCSParserRuleCall_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__LiteralExpCS__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getLiteralExpCSAccess().getIntLiteralExpCSParserRuleCall_0()); }
		ruleIntLiteralExpCS
		{ after(grammarAccess.getLiteralExpCSAccess().getIntLiteralExpCSParserRuleCall_0()); }
	)
	|
	(
		{ before(grammarAccess.getLiteralExpCSAccess().getBooleanLiteralExpCSParserRuleCall_1()); }
		ruleBooleanLiteralExpCS
		{ after(grammarAccess.getLiteralExpCSAccess().getBooleanLiteralExpCSParserRuleCall_1()); }
	)
	|
	(
		{ before(grammarAccess.getLiteralExpCSAccess().getNullLiteralExpCSParserRuleCall_2()); }
		ruleNullLiteralExpCS
		{ after(grammarAccess.getLiteralExpCSAccess().getNullLiteralExpCSParserRuleCall_2()); }
	)
	|
	(
		{ before(grammarAccess.getLiteralExpCSAccess().getCollectionLiteralExpCSParserRuleCall_3()); }
		ruleCollectionLiteralExpCS
		{ after(grammarAccess.getLiteralExpCSAccess().getCollectionLiteralExpCSParserRuleCall_3()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BooleanLiteralExpCS__Alternatives_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBooleanLiteralExpCSAccess().getBoolSymbolAssignment_1_0()); }
		(rule__BooleanLiteralExpCS__BoolSymbolAssignment_1_0)
		{ after(grammarAccess.getBooleanLiteralExpCSAccess().getBoolSymbolAssignment_1_0()); }
	)
	|
	(
		{ before(grammarAccess.getBooleanLiteralExpCSAccess().getFalseKeyword_1_1()); }
		'false'
		{ after(grammarAccess.getBooleanLiteralExpCSAccess().getFalseKeyword_1_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__RootCS__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__RootCS__Group__0__Impl
	rule__RootCS__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__RootCS__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getRootCSAccess().getImportsAssignment_0()); }
	(rule__RootCS__ImportsAssignment_0)*
	{ after(grammarAccess.getRootCSAccess().getImportsAssignment_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__RootCS__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__RootCS__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__RootCS__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getRootCSAccess().getAlternatives_1()); }
	(rule__RootCS__Alternatives_1)*
	{ after(grammarAccess.getRootCSAccess().getAlternatives_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__ImportCS__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__ImportCS__Group__0__Impl
	rule__ImportCS__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__ImportCS__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getImportCSAccess().getImportKeyword_0()); }
	'import'
	{ after(grammarAccess.getImportCSAccess().getImportKeyword_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__ImportCS__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__ImportCS__Group__1__Impl
	rule__ImportCS__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__ImportCS__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getImportCSAccess().getGroup_1()); }
	(rule__ImportCS__Group_1__0)
	{ after(grammarAccess.getImportCSAccess().getGroup_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__ImportCS__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__ImportCS__Group__2__Impl
	rule__ImportCS__Group__3
;
finally {
	restoreStackSize(stackSize);
}

rule__ImportCS__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getImportCSAccess().getUriAssignment_2()); }
	(rule__ImportCS__UriAssignment_2)
	{ after(grammarAccess.getImportCSAccess().getUriAssignment_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__ImportCS__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__ImportCS__Group__3__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__ImportCS__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getImportCSAccess().getSemicolonKeyword_3()); }
	';'
	{ after(grammarAccess.getImportCSAccess().getSemicolonKeyword_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__ImportCS__Group_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__ImportCS__Group_1__0__Impl
	rule__ImportCS__Group_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__ImportCS__Group_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getImportCSAccess().getAliasAssignment_1_0()); }
	(rule__ImportCS__AliasAssignment_1_0)
	{ after(grammarAccess.getImportCSAccess().getAliasAssignment_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__ImportCS__Group_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__ImportCS__Group_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__ImportCS__Group_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getImportCSAccess().getColonKeyword_1_1()); }
	':'
	{ after(grammarAccess.getImportCSAccess().getColonKeyword_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__PackageCS__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__PackageCS__Group__0__Impl
	rule__PackageCS__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__PackageCS__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getPackageCSAccess().getPackageKeyword_0()); }
	'package'
	{ after(grammarAccess.getPackageCSAccess().getPackageKeyword_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__PackageCS__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__PackageCS__Group__1__Impl
	rule__PackageCS__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__PackageCS__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getPackageCSAccess().getNameAssignment_1()); }
	(rule__PackageCS__NameAssignment_1)
	{ after(grammarAccess.getPackageCSAccess().getNameAssignment_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__PackageCS__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__PackageCS__Group__2__Impl
	rule__PackageCS__Group__3
;
finally {
	restoreStackSize(stackSize);
}

rule__PackageCS__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getPackageCSAccess().getLeftCurlyBracketKeyword_2()); }
	'{'
	{ after(grammarAccess.getPackageCSAccess().getLeftCurlyBracketKeyword_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__PackageCS__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__PackageCS__Group__3__Impl
	rule__PackageCS__Group__4
;
finally {
	restoreStackSize(stackSize);
}

rule__PackageCS__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getPackageCSAccess().getAlternatives_3()); }
	(rule__PackageCS__Alternatives_3)*
	{ after(grammarAccess.getPackageCSAccess().getAlternatives_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__PackageCS__Group__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__PackageCS__Group__4__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__PackageCS__Group__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getPackageCSAccess().getRightCurlyBracketKeyword_4()); }
	'}'
	{ after(grammarAccess.getPackageCSAccess().getRightCurlyBracketKeyword_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__ClassCS__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__ClassCS__Group__0__Impl
	rule__ClassCS__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__ClassCS__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassCSAccess().getClassKeyword_0()); }
	'class'
	{ after(grammarAccess.getClassCSAccess().getClassKeyword_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__ClassCS__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__ClassCS__Group__1__Impl
	rule__ClassCS__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__ClassCS__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassCSAccess().getNameAssignment_1()); }
	(rule__ClassCS__NameAssignment_1)
	{ after(grammarAccess.getClassCSAccess().getNameAssignment_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__ClassCS__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__ClassCS__Group__2__Impl
	rule__ClassCS__Group__3
;
finally {
	restoreStackSize(stackSize);
}

rule__ClassCS__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassCSAccess().getGroup_2()); }
	(rule__ClassCS__Group_2__0)?
	{ after(grammarAccess.getClassCSAccess().getGroup_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__ClassCS__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__ClassCS__Group__3__Impl
	rule__ClassCS__Group__4
;
finally {
	restoreStackSize(stackSize);
}

rule__ClassCS__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassCSAccess().getLeftCurlyBracketKeyword_3()); }
	'{'
	{ after(grammarAccess.getClassCSAccess().getLeftCurlyBracketKeyword_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__ClassCS__Group__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__ClassCS__Group__4__Impl
	rule__ClassCS__Group__5
;
finally {
	restoreStackSize(stackSize);
}

rule__ClassCS__Group__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassCSAccess().getAlternatives_4()); }
	(rule__ClassCS__Alternatives_4)*
	{ after(grammarAccess.getClassCSAccess().getAlternatives_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__ClassCS__Group__5
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__ClassCS__Group__5__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__ClassCS__Group__5__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassCSAccess().getRightCurlyBracketKeyword_5()); }
	'}'
	{ after(grammarAccess.getClassCSAccess().getRightCurlyBracketKeyword_5()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__ClassCS__Group_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__ClassCS__Group_2__0__Impl
	rule__ClassCS__Group_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__ClassCS__Group_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassCSAccess().getExtendsKeyword_2_0()); }
	'extends'
	{ after(grammarAccess.getClassCSAccess().getExtendsKeyword_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__ClassCS__Group_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__ClassCS__Group_2__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__ClassCS__Group_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassCSAccess().getExtendsAssignment_2_1()); }
	(rule__ClassCS__ExtendsAssignment_2_1)
	{ after(grammarAccess.getClassCSAccess().getExtendsAssignment_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__PropertyCS__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__PropertyCS__Group__0__Impl
	rule__PropertyCS__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__PropertyCS__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getPropertyCSAccess().getPropKeyword_0()); }
	'prop'
	{ after(grammarAccess.getPropertyCSAccess().getPropKeyword_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__PropertyCS__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__PropertyCS__Group__1__Impl
	rule__PropertyCS__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__PropertyCS__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getPropertyCSAccess().getNameAssignment_1()); }
	(rule__PropertyCS__NameAssignment_1)
	{ after(grammarAccess.getPropertyCSAccess().getNameAssignment_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__PropertyCS__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__PropertyCS__Group__2__Impl
	rule__PropertyCS__Group__3
;
finally {
	restoreStackSize(stackSize);
}

rule__PropertyCS__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getPropertyCSAccess().getColonKeyword_2()); }
	':'
	{ after(grammarAccess.getPropertyCSAccess().getColonKeyword_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__PropertyCS__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__PropertyCS__Group__3__Impl
	rule__PropertyCS__Group__4
;
finally {
	restoreStackSize(stackSize);
}

rule__PropertyCS__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getPropertyCSAccess().getTypeRefAssignment_3()); }
	(rule__PropertyCS__TypeRefAssignment_3)
	{ after(grammarAccess.getPropertyCSAccess().getTypeRefAssignment_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__PropertyCS__Group__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__PropertyCS__Group__4__Impl
	rule__PropertyCS__Group__5
;
finally {
	restoreStackSize(stackSize);
}

rule__PropertyCS__Group__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getPropertyCSAccess().getMultiplicityAssignment_4()); }
	(rule__PropertyCS__MultiplicityAssignment_4)?
	{ after(grammarAccess.getPropertyCSAccess().getMultiplicityAssignment_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__PropertyCS__Group__5
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__PropertyCS__Group__5__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__PropertyCS__Group__5__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getPropertyCSAccess().getSemicolonKeyword_5()); }
	';'
	{ after(grammarAccess.getPropertyCSAccess().getSemicolonKeyword_5()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__MultiplicityCS__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__MultiplicityCS__Group__0__Impl
	rule__MultiplicityCS__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__MultiplicityCS__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getMultiplicityCSAccess().getLeftSquareBracketKeyword_0()); }
	'['
	{ after(grammarAccess.getMultiplicityCSAccess().getLeftSquareBracketKeyword_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__MultiplicityCS__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__MultiplicityCS__Group__1__Impl
	rule__MultiplicityCS__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__MultiplicityCS__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getMultiplicityCSAccess().getAlternatives_1()); }
	(rule__MultiplicityCS__Alternatives_1)
	{ after(grammarAccess.getMultiplicityCSAccess().getAlternatives_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__MultiplicityCS__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__MultiplicityCS__Group__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__MultiplicityCS__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getMultiplicityCSAccess().getRightSquareBracketKeyword_2()); }
	']'
	{ after(grammarAccess.getMultiplicityCSAccess().getRightSquareBracketKeyword_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__MultiplicityCS__Group_1_3__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__MultiplicityCS__Group_1_3__0__Impl
	rule__MultiplicityCS__Group_1_3__1
;
finally {
	restoreStackSize(stackSize);
}

rule__MultiplicityCS__Group_1_3__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getMultiplicityCSAccess().getLowerIntAssignment_1_3_0()); }
	(rule__MultiplicityCS__LowerIntAssignment_1_3_0)
	{ after(grammarAccess.getMultiplicityCSAccess().getLowerIntAssignment_1_3_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__MultiplicityCS__Group_1_3__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__MultiplicityCS__Group_1_3__1__Impl
	rule__MultiplicityCS__Group_1_3__2
;
finally {
	restoreStackSize(stackSize);
}

rule__MultiplicityCS__Group_1_3__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getMultiplicityCSAccess().getFullStopFullStopKeyword_1_3_1()); }
	'..'
	{ after(grammarAccess.getMultiplicityCSAccess().getFullStopFullStopKeyword_1_3_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__MultiplicityCS__Group_1_3__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__MultiplicityCS__Group_1_3__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__MultiplicityCS__Group_1_3__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getMultiplicityCSAccess().getAlternatives_1_3_2()); }
	(rule__MultiplicityCS__Alternatives_1_3_2)
	{ after(grammarAccess.getMultiplicityCSAccess().getAlternatives_1_3_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__OperationCS__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__OperationCS__Group__0__Impl
	rule__OperationCS__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__OperationCS__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getOperationCSAccess().getOpKeyword_0()); }
	'op'
	{ after(grammarAccess.getOperationCSAccess().getOpKeyword_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__OperationCS__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__OperationCS__Group__1__Impl
	rule__OperationCS__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__OperationCS__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getOperationCSAccess().getNameAssignment_1()); }
	(rule__OperationCS__NameAssignment_1)
	{ after(grammarAccess.getOperationCSAccess().getNameAssignment_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__OperationCS__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__OperationCS__Group__2__Impl
	rule__OperationCS__Group__3
;
finally {
	restoreStackSize(stackSize);
}

rule__OperationCS__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getOperationCSAccess().getLeftParenthesisKeyword_2()); }
	'('
	{ after(grammarAccess.getOperationCSAccess().getLeftParenthesisKeyword_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__OperationCS__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__OperationCS__Group__3__Impl
	rule__OperationCS__Group__4
;
finally {
	restoreStackSize(stackSize);
}

rule__OperationCS__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getOperationCSAccess().getGroup_3()); }
	(rule__OperationCS__Group_3__0)?
	{ after(grammarAccess.getOperationCSAccess().getGroup_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__OperationCS__Group__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__OperationCS__Group__4__Impl
	rule__OperationCS__Group__5
;
finally {
	restoreStackSize(stackSize);
}

rule__OperationCS__Group__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getOperationCSAccess().getRightParenthesisKeyword_4()); }
	')'
	{ after(grammarAccess.getOperationCSAccess().getRightParenthesisKeyword_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__OperationCS__Group__5
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__OperationCS__Group__5__Impl
	rule__OperationCS__Group__6
;
finally {
	restoreStackSize(stackSize);
}

rule__OperationCS__Group__5__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getOperationCSAccess().getColonKeyword_5()); }
	':'
	{ after(grammarAccess.getOperationCSAccess().getColonKeyword_5()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__OperationCS__Group__6
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__OperationCS__Group__6__Impl
	rule__OperationCS__Group__7
;
finally {
	restoreStackSize(stackSize);
}

rule__OperationCS__Group__6__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getOperationCSAccess().getResultRefAssignment_6()); }
	(rule__OperationCS__ResultRefAssignment_6)
	{ after(grammarAccess.getOperationCSAccess().getResultRefAssignment_6()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__OperationCS__Group__7
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__OperationCS__Group__7__Impl
	rule__OperationCS__Group__8
;
finally {
	restoreStackSize(stackSize);
}

rule__OperationCS__Group__7__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getOperationCSAccess().getEqualsSignKeyword_7()); }
	'='
	{ after(grammarAccess.getOperationCSAccess().getEqualsSignKeyword_7()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__OperationCS__Group__8
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__OperationCS__Group__8__Impl
	rule__OperationCS__Group__9
;
finally {
	restoreStackSize(stackSize);
}

rule__OperationCS__Group__8__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getOperationCSAccess().getBodyAssignment_8()); }
	(rule__OperationCS__BodyAssignment_8)
	{ after(grammarAccess.getOperationCSAccess().getBodyAssignment_8()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__OperationCS__Group__9
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__OperationCS__Group__9__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__OperationCS__Group__9__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getOperationCSAccess().getSemicolonKeyword_9()); }
	';'
	{ after(grammarAccess.getOperationCSAccess().getSemicolonKeyword_9()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__OperationCS__Group_3__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__OperationCS__Group_3__0__Impl
	rule__OperationCS__Group_3__1
;
finally {
	restoreStackSize(stackSize);
}

rule__OperationCS__Group_3__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getOperationCSAccess().getParamsAssignment_3_0()); }
	(rule__OperationCS__ParamsAssignment_3_0)
	{ after(grammarAccess.getOperationCSAccess().getParamsAssignment_3_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__OperationCS__Group_3__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__OperationCS__Group_3__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__OperationCS__Group_3__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getOperationCSAccess().getGroup_3_1()); }
	(rule__OperationCS__Group_3_1__0)*
	{ after(grammarAccess.getOperationCSAccess().getGroup_3_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__OperationCS__Group_3_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__OperationCS__Group_3_1__0__Impl
	rule__OperationCS__Group_3_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__OperationCS__Group_3_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getOperationCSAccess().getCommaKeyword_3_1_0()); }
	','
	{ after(grammarAccess.getOperationCSAccess().getCommaKeyword_3_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__OperationCS__Group_3_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__OperationCS__Group_3_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__OperationCS__Group_3_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getOperationCSAccess().getParamsAssignment_3_1_1()); }
	(rule__OperationCS__ParamsAssignment_3_1_1)
	{ after(grammarAccess.getOperationCSAccess().getParamsAssignment_3_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__ParameterCS__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__ParameterCS__Group__0__Impl
	rule__ParameterCS__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__ParameterCS__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getParameterCSAccess().getNameAssignment_0()); }
	(rule__ParameterCS__NameAssignment_0)
	{ after(grammarAccess.getParameterCSAccess().getNameAssignment_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__ParameterCS__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__ParameterCS__Group__1__Impl
	rule__ParameterCS__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__ParameterCS__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getParameterCSAccess().getColonKeyword_1()); }
	':'
	{ after(grammarAccess.getParameterCSAccess().getColonKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__ParameterCS__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__ParameterCS__Group__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__ParameterCS__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getParameterCSAccess().getTypeRefAssignment_2()); }
	(rule__ParameterCS__TypeRefAssignment_2)
	{ after(grammarAccess.getParameterCSAccess().getTypeRefAssignment_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__ConstraintsDefCS__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__ConstraintsDefCS__Group__0__Impl
	rule__ConstraintsDefCS__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__ConstraintsDefCS__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getConstraintsDefCSAccess().getContextKeyword_0()); }
	'context'
	{ after(grammarAccess.getConstraintsDefCSAccess().getContextKeyword_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__ConstraintsDefCS__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__ConstraintsDefCS__Group__1__Impl
	rule__ConstraintsDefCS__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__ConstraintsDefCS__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getConstraintsDefCSAccess().getTypeRefAssignment_1()); }
	(rule__ConstraintsDefCS__TypeRefAssignment_1)
	{ after(grammarAccess.getConstraintsDefCSAccess().getTypeRefAssignment_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__ConstraintsDefCS__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__ConstraintsDefCS__Group__2__Impl
	rule__ConstraintsDefCS__Group__3
;
finally {
	restoreStackSize(stackSize);
}

rule__ConstraintsDefCS__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getConstraintsDefCSAccess().getLeftCurlyBracketKeyword_2()); }
	'{'
	{ after(grammarAccess.getConstraintsDefCSAccess().getLeftCurlyBracketKeyword_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__ConstraintsDefCS__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__ConstraintsDefCS__Group__3__Impl
	rule__ConstraintsDefCS__Group__4
;
finally {
	restoreStackSize(stackSize);
}

rule__ConstraintsDefCS__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getConstraintsDefCSAccess().getInvariantsAssignment_3()); }
	(rule__ConstraintsDefCS__InvariantsAssignment_3)*
	{ after(grammarAccess.getConstraintsDefCSAccess().getInvariantsAssignment_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__ConstraintsDefCS__Group__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__ConstraintsDefCS__Group__4__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__ConstraintsDefCS__Group__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getConstraintsDefCSAccess().getRightCurlyBracketKeyword_4()); }
	'}'
	{ after(grammarAccess.getConstraintsDefCSAccess().getRightCurlyBracketKeyword_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__InvariantCS__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__InvariantCS__Group__0__Impl
	rule__InvariantCS__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__InvariantCS__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getInvariantCSAccess().getInvKeyword_0()); }
	'inv'
	{ after(grammarAccess.getInvariantCSAccess().getInvKeyword_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__InvariantCS__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__InvariantCS__Group__1__Impl
	rule__InvariantCS__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__InvariantCS__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getInvariantCSAccess().getColonKeyword_1()); }
	':'
	{ after(grammarAccess.getInvariantCSAccess().getColonKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__InvariantCS__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__InvariantCS__Group__2__Impl
	rule__InvariantCS__Group__3
;
finally {
	restoreStackSize(stackSize);
}

rule__InvariantCS__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getInvariantCSAccess().getExpAssignment_2()); }
	(rule__InvariantCS__ExpAssignment_2)
	{ after(grammarAccess.getInvariantCSAccess().getExpAssignment_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__InvariantCS__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__InvariantCS__Group__3__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__InvariantCS__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getInvariantCSAccess().getSemicolonKeyword_3()); }
	';'
	{ after(grammarAccess.getInvariantCSAccess().getSemicolonKeyword_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EqualityExpCS__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EqualityExpCS__Group__0__Impl
	rule__EqualityExpCS__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EqualityExpCS__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEqualityExpCSAccess().getCallExpCSParserRuleCall_0()); }
	ruleCallExpCS
	{ after(grammarAccess.getEqualityExpCSAccess().getCallExpCSParserRuleCall_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EqualityExpCS__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EqualityExpCS__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EqualityExpCS__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEqualityExpCSAccess().getGroup_1()); }
	(rule__EqualityExpCS__Group_1__0)*
	{ after(grammarAccess.getEqualityExpCSAccess().getGroup_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EqualityExpCS__Group_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EqualityExpCS__Group_1__0__Impl
	rule__EqualityExpCS__Group_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EqualityExpCS__Group_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEqualityExpCSAccess().getEqualityExpCSLeftAction_1_0()); }
	()
	{ after(grammarAccess.getEqualityExpCSAccess().getEqualityExpCSLeftAction_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EqualityExpCS__Group_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EqualityExpCS__Group_1__1__Impl
	rule__EqualityExpCS__Group_1__2
;
finally {
	restoreStackSize(stackSize);
}

rule__EqualityExpCS__Group_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEqualityExpCSAccess().getOpNameAssignment_1_1()); }
	(rule__EqualityExpCS__OpNameAssignment_1_1)
	{ after(grammarAccess.getEqualityExpCSAccess().getOpNameAssignment_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EqualityExpCS__Group_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EqualityExpCS__Group_1__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EqualityExpCS__Group_1__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEqualityExpCSAccess().getRightAssignment_1_2()); }
	(rule__EqualityExpCS__RightAssignment_1_2)
	{ after(grammarAccess.getEqualityExpCSAccess().getRightAssignment_1_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__CallExpCS__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__CallExpCS__Group__0__Impl
	rule__CallExpCS__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__CallExpCS__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getCallExpCSAccess().getPrimaryExpCSParserRuleCall_0()); }
	rulePrimaryExpCS
	{ after(grammarAccess.getCallExpCSAccess().getPrimaryExpCSParserRuleCall_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__CallExpCS__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__CallExpCS__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__CallExpCS__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getCallExpCSAccess().getGroup_1()); }
	(rule__CallExpCS__Group_1__0)*
	{ after(grammarAccess.getCallExpCSAccess().getGroup_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__CallExpCS__Group_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__CallExpCS__Group_1__0__Impl
	rule__CallExpCS__Group_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__CallExpCS__Group_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getCallExpCSAccess().getCallExpCSSourceAction_1_0()); }
	()
	{ after(grammarAccess.getCallExpCSAccess().getCallExpCSSourceAction_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__CallExpCS__Group_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__CallExpCS__Group_1__1__Impl
	rule__CallExpCS__Group_1__2
;
finally {
	restoreStackSize(stackSize);
}

rule__CallExpCS__Group_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getCallExpCSAccess().getOpNameAssignment_1_1()); }
	(rule__CallExpCS__OpNameAssignment_1_1)
	{ after(grammarAccess.getCallExpCSAccess().getOpNameAssignment_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__CallExpCS__Group_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__CallExpCS__Group_1__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__CallExpCS__Group_1__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getCallExpCSAccess().getNavExpAssignment_1_2()); }
	(rule__CallExpCS__NavExpAssignment_1_2)
	{ after(grammarAccess.getCallExpCSAccess().getNavExpAssignment_1_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__SelfExpCS__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__SelfExpCS__Group__0__Impl
	rule__SelfExpCS__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__SelfExpCS__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getSelfExpCSAccess().getSelfExpCSAction_0()); }
	()
	{ after(grammarAccess.getSelfExpCSAccess().getSelfExpCSAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__SelfExpCS__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__SelfExpCS__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__SelfExpCS__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getSelfExpCSAccess().getSelfKeyword_1()); }
	'self'
	{ after(grammarAccess.getSelfExpCSAccess().getSelfKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__CollectExpCS__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__CollectExpCS__Group__0__Impl
	rule__CollectExpCS__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__CollectExpCS__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getCollectExpCSAccess().getCollectKeyword_0()); }
	'collect'
	{ after(grammarAccess.getCollectExpCSAccess().getCollectKeyword_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__CollectExpCS__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__CollectExpCS__Group__1__Impl
	rule__CollectExpCS__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__CollectExpCS__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getCollectExpCSAccess().getLeftParenthesisKeyword_1()); }
	'('
	{ after(grammarAccess.getCollectExpCSAccess().getLeftParenthesisKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__CollectExpCS__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__CollectExpCS__Group__2__Impl
	rule__CollectExpCS__Group__3
;
finally {
	restoreStackSize(stackSize);
}

rule__CollectExpCS__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getCollectExpCSAccess().getGroup_2()); }
	(rule__CollectExpCS__Group_2__0)?
	{ after(grammarAccess.getCollectExpCSAccess().getGroup_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__CollectExpCS__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__CollectExpCS__Group__3__Impl
	rule__CollectExpCS__Group__4
;
finally {
	restoreStackSize(stackSize);
}

rule__CollectExpCS__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getCollectExpCSAccess().getExpAssignment_3()); }
	(rule__CollectExpCS__ExpAssignment_3)
	{ after(grammarAccess.getCollectExpCSAccess().getExpAssignment_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__CollectExpCS__Group__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__CollectExpCS__Group__4__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__CollectExpCS__Group__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getCollectExpCSAccess().getRightParenthesisKeyword_4()); }
	')'
	{ after(grammarAccess.getCollectExpCSAccess().getRightParenthesisKeyword_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__CollectExpCS__Group_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__CollectExpCS__Group_2__0__Impl
	rule__CollectExpCS__Group_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__CollectExpCS__Group_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getCollectExpCSAccess().getItVarAssignment_2_0()); }
	(rule__CollectExpCS__ItVarAssignment_2_0)
	{ after(grammarAccess.getCollectExpCSAccess().getItVarAssignment_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__CollectExpCS__Group_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__CollectExpCS__Group_2__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__CollectExpCS__Group_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getCollectExpCSAccess().getVerticalLineKeyword_2_1()); }
	'|'
	{ after(grammarAccess.getCollectExpCSAccess().getVerticalLineKeyword_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__IteratorVarCS__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__IteratorVarCS__Group__0__Impl
	rule__IteratorVarCS__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__IteratorVarCS__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getIteratorVarCSAccess().getItNameAssignment_0()); }
	(rule__IteratorVarCS__ItNameAssignment_0)
	{ after(grammarAccess.getIteratorVarCSAccess().getItNameAssignment_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__IteratorVarCS__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__IteratorVarCS__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__IteratorVarCS__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getIteratorVarCSAccess().getGroup_1()); }
	(rule__IteratorVarCS__Group_1__0)?
	{ after(grammarAccess.getIteratorVarCSAccess().getGroup_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__IteratorVarCS__Group_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__IteratorVarCS__Group_1__0__Impl
	rule__IteratorVarCS__Group_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__IteratorVarCS__Group_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getIteratorVarCSAccess().getColonKeyword_1_0()); }
	':'
	{ after(grammarAccess.getIteratorVarCSAccess().getColonKeyword_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__IteratorVarCS__Group_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__IteratorVarCS__Group_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__IteratorVarCS__Group_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getIteratorVarCSAccess().getItTypeAssignment_1_1()); }
	(rule__IteratorVarCS__ItTypeAssignment_1_1)
	{ after(grammarAccess.getIteratorVarCSAccess().getItTypeAssignment_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__IterateExpCS__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__IterateExpCS__Group__0__Impl
	rule__IterateExpCS__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__IterateExpCS__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getIterateExpCSAccess().getIterateKeyword_0()); }
	'iterate'
	{ after(grammarAccess.getIterateExpCSAccess().getIterateKeyword_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__IterateExpCS__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__IterateExpCS__Group__1__Impl
	rule__IterateExpCS__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__IterateExpCS__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getIterateExpCSAccess().getLeftParenthesisKeyword_1()); }
	'('
	{ after(grammarAccess.getIterateExpCSAccess().getLeftParenthesisKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__IterateExpCS__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__IterateExpCS__Group__2__Impl
	rule__IterateExpCS__Group__3
;
finally {
	restoreStackSize(stackSize);
}

rule__IterateExpCS__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getIterateExpCSAccess().getItVarAssignment_2()); }
	(rule__IterateExpCS__ItVarAssignment_2)
	{ after(grammarAccess.getIterateExpCSAccess().getItVarAssignment_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__IterateExpCS__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__IterateExpCS__Group__3__Impl
	rule__IterateExpCS__Group__4
;
finally {
	restoreStackSize(stackSize);
}

rule__IterateExpCS__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getIterateExpCSAccess().getSemicolonKeyword_3()); }
	';'
	{ after(grammarAccess.getIterateExpCSAccess().getSemicolonKeyword_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__IterateExpCS__Group__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__IterateExpCS__Group__4__Impl
	rule__IterateExpCS__Group__5
;
finally {
	restoreStackSize(stackSize);
}

rule__IterateExpCS__Group__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getIterateExpCSAccess().getAccVarAssignment_4()); }
	(rule__IterateExpCS__AccVarAssignment_4)
	{ after(grammarAccess.getIterateExpCSAccess().getAccVarAssignment_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__IterateExpCS__Group__5
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__IterateExpCS__Group__5__Impl
	rule__IterateExpCS__Group__6
;
finally {
	restoreStackSize(stackSize);
}

rule__IterateExpCS__Group__5__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getIterateExpCSAccess().getVerticalLineKeyword_5()); }
	'|'
	{ after(grammarAccess.getIterateExpCSAccess().getVerticalLineKeyword_5()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__IterateExpCS__Group__6
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__IterateExpCS__Group__6__Impl
	rule__IterateExpCS__Group__7
;
finally {
	restoreStackSize(stackSize);
}

rule__IterateExpCS__Group__6__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getIterateExpCSAccess().getExpAssignment_6()); }
	(rule__IterateExpCS__ExpAssignment_6)
	{ after(grammarAccess.getIterateExpCSAccess().getExpAssignment_6()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__IterateExpCS__Group__7
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__IterateExpCS__Group__7__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__IterateExpCS__Group__7__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getIterateExpCSAccess().getRightParenthesisKeyword_7()); }
	')'
	{ after(grammarAccess.getIterateExpCSAccess().getRightParenthesisKeyword_7()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__AccVarCS__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__AccVarCS__Group__0__Impl
	rule__AccVarCS__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__AccVarCS__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getAccVarCSAccess().getAccNameAssignment_0()); }
	(rule__AccVarCS__AccNameAssignment_0)
	{ after(grammarAccess.getAccVarCSAccess().getAccNameAssignment_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__AccVarCS__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__AccVarCS__Group__1__Impl
	rule__AccVarCS__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__AccVarCS__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getAccVarCSAccess().getGroup_1()); }
	(rule__AccVarCS__Group_1__0)?
	{ after(grammarAccess.getAccVarCSAccess().getGroup_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__AccVarCS__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__AccVarCS__Group__2__Impl
	rule__AccVarCS__Group__3
;
finally {
	restoreStackSize(stackSize);
}

rule__AccVarCS__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getAccVarCSAccess().getEqualsSignKeyword_2()); }
	'='
	{ after(grammarAccess.getAccVarCSAccess().getEqualsSignKeyword_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__AccVarCS__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__AccVarCS__Group__3__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__AccVarCS__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getAccVarCSAccess().getAccInitExpAssignment_3()); }
	(rule__AccVarCS__AccInitExpAssignment_3)
	{ after(grammarAccess.getAccVarCSAccess().getAccInitExpAssignment_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__AccVarCS__Group_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__AccVarCS__Group_1__0__Impl
	rule__AccVarCS__Group_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__AccVarCS__Group_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getAccVarCSAccess().getColonKeyword_1_0()); }
	':'
	{ after(grammarAccess.getAccVarCSAccess().getColonKeyword_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__AccVarCS__Group_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__AccVarCS__Group_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__AccVarCS__Group_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getAccVarCSAccess().getAccTypeAssignment_1_1()); }
	(rule__AccVarCS__AccTypeAssignment_1_1)
	{ after(grammarAccess.getAccVarCSAccess().getAccTypeAssignment_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__NameExpCS__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__NameExpCS__Group__0__Impl
	rule__NameExpCS__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__NameExpCS__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getNameExpCSAccess().getExpNameAssignment_0()); }
	(rule__NameExpCS__ExpNameAssignment_0)
	{ after(grammarAccess.getNameExpCSAccess().getExpNameAssignment_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__NameExpCS__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__NameExpCS__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__NameExpCS__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getNameExpCSAccess().getRoundedBracketsAssignment_1()); }
	(rule__NameExpCS__RoundedBracketsAssignment_1)?
	{ after(grammarAccess.getNameExpCSAccess().getRoundedBracketsAssignment_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__RoundedBracketClauseCS__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__RoundedBracketClauseCS__Group__0__Impl
	rule__RoundedBracketClauseCS__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__RoundedBracketClauseCS__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getRoundedBracketClauseCSAccess().getRoundedBracketClauseCSAction_0()); }
	()
	{ after(grammarAccess.getRoundedBracketClauseCSAccess().getRoundedBracketClauseCSAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__RoundedBracketClauseCS__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__RoundedBracketClauseCS__Group__1__Impl
	rule__RoundedBracketClauseCS__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__RoundedBracketClauseCS__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getRoundedBracketClauseCSAccess().getLeftParenthesisKeyword_1()); }
	'('
	{ after(grammarAccess.getRoundedBracketClauseCSAccess().getLeftParenthesisKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__RoundedBracketClauseCS__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__RoundedBracketClauseCS__Group__2__Impl
	rule__RoundedBracketClauseCS__Group__3
;
finally {
	restoreStackSize(stackSize);
}

rule__RoundedBracketClauseCS__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getRoundedBracketClauseCSAccess().getGroup_2()); }
	(rule__RoundedBracketClauseCS__Group_2__0)?
	{ after(grammarAccess.getRoundedBracketClauseCSAccess().getGroup_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__RoundedBracketClauseCS__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__RoundedBracketClauseCS__Group__3__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__RoundedBracketClauseCS__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getRoundedBracketClauseCSAccess().getRightParenthesisKeyword_3()); }
	')'
	{ after(grammarAccess.getRoundedBracketClauseCSAccess().getRightParenthesisKeyword_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__RoundedBracketClauseCS__Group_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__RoundedBracketClauseCS__Group_2__0__Impl
	rule__RoundedBracketClauseCS__Group_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__RoundedBracketClauseCS__Group_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getRoundedBracketClauseCSAccess().getArgsAssignment_2_0()); }
	(rule__RoundedBracketClauseCS__ArgsAssignment_2_0)
	{ after(grammarAccess.getRoundedBracketClauseCSAccess().getArgsAssignment_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__RoundedBracketClauseCS__Group_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__RoundedBracketClauseCS__Group_2__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__RoundedBracketClauseCS__Group_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getRoundedBracketClauseCSAccess().getGroup_2_1()); }
	(rule__RoundedBracketClauseCS__Group_2_1__0)*
	{ after(grammarAccess.getRoundedBracketClauseCSAccess().getGroup_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__RoundedBracketClauseCS__Group_2_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__RoundedBracketClauseCS__Group_2_1__0__Impl
	rule__RoundedBracketClauseCS__Group_2_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__RoundedBracketClauseCS__Group_2_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getRoundedBracketClauseCSAccess().getCommaKeyword_2_1_0()); }
	','
	{ after(grammarAccess.getRoundedBracketClauseCSAccess().getCommaKeyword_2_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__RoundedBracketClauseCS__Group_2_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__RoundedBracketClauseCS__Group_2_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__RoundedBracketClauseCS__Group_2_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getRoundedBracketClauseCSAccess().getArgsAssignment_2_1_1()); }
	(rule__RoundedBracketClauseCS__ArgsAssignment_2_1_1)
	{ after(grammarAccess.getRoundedBracketClauseCSAccess().getArgsAssignment_2_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__BooleanLiteralExpCS__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BooleanLiteralExpCS__Group__0__Impl
	rule__BooleanLiteralExpCS__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__BooleanLiteralExpCS__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBooleanLiteralExpCSAccess().getBooleanExpCSAction_0()); }
	()
	{ after(grammarAccess.getBooleanLiteralExpCSAccess().getBooleanExpCSAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BooleanLiteralExpCS__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BooleanLiteralExpCS__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__BooleanLiteralExpCS__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBooleanLiteralExpCSAccess().getAlternatives_1()); }
	(rule__BooleanLiteralExpCS__Alternatives_1)
	{ after(grammarAccess.getBooleanLiteralExpCSAccess().getAlternatives_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__NullLiteralExpCS__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__NullLiteralExpCS__Group__0__Impl
	rule__NullLiteralExpCS__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__NullLiteralExpCS__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getNullLiteralExpCSAccess().getNullLiteralExpCSAction_0()); }
	()
	{ after(grammarAccess.getNullLiteralExpCSAccess().getNullLiteralExpCSAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__NullLiteralExpCS__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__NullLiteralExpCS__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__NullLiteralExpCS__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getNullLiteralExpCSAccess().getNullKeyword_1()); }
	'null'
	{ after(grammarAccess.getNullLiteralExpCSAccess().getNullKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__CollectionLiteralExpCS__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__CollectionLiteralExpCS__Group__0__Impl
	rule__CollectionLiteralExpCS__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__CollectionLiteralExpCS__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getCollectionLiteralExpCSAccess().getKindAssignment_0()); }
	(rule__CollectionLiteralExpCS__KindAssignment_0)
	{ after(grammarAccess.getCollectionLiteralExpCSAccess().getKindAssignment_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__CollectionLiteralExpCS__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__CollectionLiteralExpCS__Group__1__Impl
	rule__CollectionLiteralExpCS__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__CollectionLiteralExpCS__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getCollectionLiteralExpCSAccess().getLeftCurlyBracketKeyword_1()); }
	'{'
	{ after(grammarAccess.getCollectionLiteralExpCSAccess().getLeftCurlyBracketKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__CollectionLiteralExpCS__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__CollectionLiteralExpCS__Group__2__Impl
	rule__CollectionLiteralExpCS__Group__3
;
finally {
	restoreStackSize(stackSize);
}

rule__CollectionLiteralExpCS__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getCollectionLiteralExpCSAccess().getPartsAssignment_2()); }
	(rule__CollectionLiteralExpCS__PartsAssignment_2)*
	{ after(grammarAccess.getCollectionLiteralExpCSAccess().getPartsAssignment_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__CollectionLiteralExpCS__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__CollectionLiteralExpCS__Group__3__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__CollectionLiteralExpCS__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getCollectionLiteralExpCSAccess().getRightCurlyBracketKeyword_3()); }
	'}'
	{ after(grammarAccess.getCollectionLiteralExpCSAccess().getRightCurlyBracketKeyword_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__CollectionLiteralPartCS__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__CollectionLiteralPartCS__Group__0__Impl
	rule__CollectionLiteralPartCS__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__CollectionLiteralPartCS__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getCollectionLiteralPartCSAccess().getFirstAssignment_0()); }
	(rule__CollectionLiteralPartCS__FirstAssignment_0)
	{ after(grammarAccess.getCollectionLiteralPartCSAccess().getFirstAssignment_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__CollectionLiteralPartCS__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__CollectionLiteralPartCS__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__CollectionLiteralPartCS__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getCollectionLiteralPartCSAccess().getGroup_1()); }
	(rule__CollectionLiteralPartCS__Group_1__0)?
	{ after(grammarAccess.getCollectionLiteralPartCSAccess().getGroup_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__CollectionLiteralPartCS__Group_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__CollectionLiteralPartCS__Group_1__0__Impl
	rule__CollectionLiteralPartCS__Group_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__CollectionLiteralPartCS__Group_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getCollectionLiteralPartCSAccess().getFullStopFullStopKeyword_1_0()); }
	'..'
	{ after(grammarAccess.getCollectionLiteralPartCSAccess().getFullStopFullStopKeyword_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__CollectionLiteralPartCS__Group_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__CollectionLiteralPartCS__Group_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__CollectionLiteralPartCS__Group_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getCollectionLiteralPartCSAccess().getLastAssignment_1_1()); }
	(rule__CollectionLiteralPartCS__LastAssignment_1_1)
	{ after(grammarAccess.getCollectionLiteralPartCSAccess().getLastAssignment_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__LetExpCS__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__LetExpCS__Group__0__Impl
	rule__LetExpCS__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__LetExpCS__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getLetExpCSAccess().getLetKeyword_0()); }
	'let'
	{ after(grammarAccess.getLetExpCSAccess().getLetKeyword_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__LetExpCS__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__LetExpCS__Group__1__Impl
	rule__LetExpCS__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__LetExpCS__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getLetExpCSAccess().getLetVarsAssignment_1()); }
	(rule__LetExpCS__LetVarsAssignment_1)
	{ after(grammarAccess.getLetExpCSAccess().getLetVarsAssignment_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__LetExpCS__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__LetExpCS__Group__2__Impl
	rule__LetExpCS__Group__3
;
finally {
	restoreStackSize(stackSize);
}

rule__LetExpCS__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getLetExpCSAccess().getGroup_2()); }
	(rule__LetExpCS__Group_2__0)*
	{ after(grammarAccess.getLetExpCSAccess().getGroup_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__LetExpCS__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__LetExpCS__Group__3__Impl
	rule__LetExpCS__Group__4
;
finally {
	restoreStackSize(stackSize);
}

rule__LetExpCS__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getLetExpCSAccess().getInKeyword_3()); }
	'in'
	{ after(grammarAccess.getLetExpCSAccess().getInKeyword_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__LetExpCS__Group__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__LetExpCS__Group__4__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__LetExpCS__Group__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getLetExpCSAccess().getInExpAssignment_4()); }
	(rule__LetExpCS__InExpAssignment_4)
	{ after(grammarAccess.getLetExpCSAccess().getInExpAssignment_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__LetExpCS__Group_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__LetExpCS__Group_2__0__Impl
	rule__LetExpCS__Group_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__LetExpCS__Group_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getLetExpCSAccess().getCommaKeyword_2_0()); }
	','
	{ after(grammarAccess.getLetExpCSAccess().getCommaKeyword_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__LetExpCS__Group_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__LetExpCS__Group_2__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__LetExpCS__Group_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getLetExpCSAccess().getLetVarsAssignment_2_1()); }
	(rule__LetExpCS__LetVarsAssignment_2_1)
	{ after(grammarAccess.getLetExpCSAccess().getLetVarsAssignment_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__LetVarCS__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__LetVarCS__Group__0__Impl
	rule__LetVarCS__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__LetVarCS__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getLetVarCSAccess().getNameAssignment_0()); }
	(rule__LetVarCS__NameAssignment_0)
	{ after(grammarAccess.getLetVarCSAccess().getNameAssignment_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__LetVarCS__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__LetVarCS__Group__1__Impl
	rule__LetVarCS__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__LetVarCS__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getLetVarCSAccess().getGroup_1()); }
	(rule__LetVarCS__Group_1__0)?
	{ after(grammarAccess.getLetVarCSAccess().getGroup_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__LetVarCS__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__LetVarCS__Group__2__Impl
	rule__LetVarCS__Group__3
;
finally {
	restoreStackSize(stackSize);
}

rule__LetVarCS__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getLetVarCSAccess().getEqualsSignKeyword_2()); }
	'='
	{ after(grammarAccess.getLetVarCSAccess().getEqualsSignKeyword_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__LetVarCS__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__LetVarCS__Group__3__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__LetVarCS__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getLetVarCSAccess().getInitExpAssignment_3()); }
	(rule__LetVarCS__InitExpAssignment_3)
	{ after(grammarAccess.getLetVarCSAccess().getInitExpAssignment_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__LetVarCS__Group_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__LetVarCS__Group_1__0__Impl
	rule__LetVarCS__Group_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__LetVarCS__Group_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getLetVarCSAccess().getColonKeyword_1_0()); }
	':'
	{ after(grammarAccess.getLetVarCSAccess().getColonKeyword_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__LetVarCS__Group_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__LetVarCS__Group_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__LetVarCS__Group_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getLetVarCSAccess().getTypeRefAssignment_1_1()); }
	(rule__LetVarCS__TypeRefAssignment_1_1)
	{ after(grammarAccess.getLetVarCSAccess().getTypeRefAssignment_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__PathNameCS__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__PathNameCS__Group__0__Impl
	rule__PathNameCS__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__PathNameCS__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getPathNameCSAccess().getPathElementsAssignment_0()); }
	(rule__PathNameCS__PathElementsAssignment_0)
	{ after(grammarAccess.getPathNameCSAccess().getPathElementsAssignment_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__PathNameCS__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__PathNameCS__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__PathNameCS__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getPathNameCSAccess().getGroup_1()); }
	(rule__PathNameCS__Group_1__0)*
	{ after(grammarAccess.getPathNameCSAccess().getGroup_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__PathNameCS__Group_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__PathNameCS__Group_1__0__Impl
	rule__PathNameCS__Group_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__PathNameCS__Group_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getPathNameCSAccess().getColonColonKeyword_1_0()); }
	'::'
	{ after(grammarAccess.getPathNameCSAccess().getColonColonKeyword_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__PathNameCS__Group_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__PathNameCS__Group_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__PathNameCS__Group_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getPathNameCSAccess().getPathElementsAssignment_1_1()); }
	(rule__PathNameCS__PathElementsAssignment_1_1)
	{ after(grammarAccess.getPathNameCSAccess().getPathElementsAssignment_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__RootCS__ImportsAssignment_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getRootCSAccess().getImportsImportCSParserRuleCall_0_0()); }
		ruleImportCS
		{ after(grammarAccess.getRootCSAccess().getImportsImportCSParserRuleCall_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__RootCS__PackagesAssignment_1_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getRootCSAccess().getPackagesPackageCSParserRuleCall_1_0_0()); }
		rulePackageCS
		{ after(grammarAccess.getRootCSAccess().getPackagesPackageCSParserRuleCall_1_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__RootCS__ConstraintsAssignment_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getRootCSAccess().getConstraintsConstraintsDefCSParserRuleCall_1_1_0()); }
		ruleConstraintsDefCS
		{ after(grammarAccess.getRootCSAccess().getConstraintsConstraintsDefCSParserRuleCall_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__ImportCS__AliasAssignment_1_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getImportCSAccess().getAliasIDTerminalRuleCall_1_0_0()); }
		RULE_ID
		{ after(grammarAccess.getImportCSAccess().getAliasIDTerminalRuleCall_1_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__ImportCS__UriAssignment_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getImportCSAccess().getUriSTRINGTerminalRuleCall_2_0()); }
		RULE_STRING
		{ after(grammarAccess.getImportCSAccess().getUriSTRINGTerminalRuleCall_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__PackageCS__NameAssignment_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getPackageCSAccess().getNameIDTerminalRuleCall_1_0()); }
		RULE_ID
		{ after(grammarAccess.getPackageCSAccess().getNameIDTerminalRuleCall_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__PackageCS__PackagesAssignment_3_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getPackageCSAccess().getPackagesPackageCSParserRuleCall_3_0_0()); }
		rulePackageCS
		{ after(grammarAccess.getPackageCSAccess().getPackagesPackageCSParserRuleCall_3_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__PackageCS__ClassesAssignment_3_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getPackageCSAccess().getClassesClassCSParserRuleCall_3_1_0()); }
		ruleClassCS
		{ after(grammarAccess.getPackageCSAccess().getClassesClassCSParserRuleCall_3_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__ClassCS__NameAssignment_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getClassCSAccess().getNameIDTerminalRuleCall_1_0()); }
		RULE_ID
		{ after(grammarAccess.getClassCSAccess().getNameIDTerminalRuleCall_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__ClassCS__ExtendsAssignment_2_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getClassCSAccess().getExtendsPathNameCSParserRuleCall_2_1_0()); }
		rulePathNameCS
		{ after(grammarAccess.getClassCSAccess().getExtendsPathNameCSParserRuleCall_2_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__ClassCS__PropertiesAssignment_4_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getClassCSAccess().getPropertiesPropertyCSParserRuleCall_4_0_0()); }
		rulePropertyCS
		{ after(grammarAccess.getClassCSAccess().getPropertiesPropertyCSParserRuleCall_4_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__ClassCS__OperationsAssignment_4_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getClassCSAccess().getOperationsOperationCSParserRuleCall_4_1_0()); }
		ruleOperationCS
		{ after(grammarAccess.getClassCSAccess().getOperationsOperationCSParserRuleCall_4_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__PropertyCS__NameAssignment_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getPropertyCSAccess().getNameIDTerminalRuleCall_1_0()); }
		RULE_ID
		{ after(grammarAccess.getPropertyCSAccess().getNameIDTerminalRuleCall_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__PropertyCS__TypeRefAssignment_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getPropertyCSAccess().getTypeRefPathNameCSParserRuleCall_3_0()); }
		rulePathNameCS
		{ after(grammarAccess.getPropertyCSAccess().getTypeRefPathNameCSParserRuleCall_3_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__PropertyCS__MultiplicityAssignment_4
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getPropertyCSAccess().getMultiplicityMultiplicityCSParserRuleCall_4_0()); }
		ruleMultiplicityCS
		{ after(grammarAccess.getPropertyCSAccess().getMultiplicityMultiplicityCSParserRuleCall_4_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__MultiplicityCS__OptAssignment_1_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getMultiplicityCSAccess().getOptQuestionMarkKeyword_1_0_0()); }
		(
			{ before(grammarAccess.getMultiplicityCSAccess().getOptQuestionMarkKeyword_1_0_0()); }
			'?'
			{ after(grammarAccess.getMultiplicityCSAccess().getOptQuestionMarkKeyword_1_0_0()); }
		)
		{ after(grammarAccess.getMultiplicityCSAccess().getOptQuestionMarkKeyword_1_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__MultiplicityCS__MultAssignment_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getMultiplicityCSAccess().getMultAsteriskKeyword_1_1_0()); }
		(
			{ before(grammarAccess.getMultiplicityCSAccess().getMultAsteriskKeyword_1_1_0()); }
			'*'
			{ after(grammarAccess.getMultiplicityCSAccess().getMultAsteriskKeyword_1_1_0()); }
		)
		{ after(grammarAccess.getMultiplicityCSAccess().getMultAsteriskKeyword_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__MultiplicityCS__MandatoryAssignment_1_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getMultiplicityCSAccess().getMandatoryINTTerminalRuleCall_1_2_0()); }
		RULE_INT
		{ after(grammarAccess.getMultiplicityCSAccess().getMandatoryINTTerminalRuleCall_1_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__MultiplicityCS__LowerIntAssignment_1_3_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getMultiplicityCSAccess().getLowerIntINTTerminalRuleCall_1_3_0_0()); }
		RULE_INT
		{ after(grammarAccess.getMultiplicityCSAccess().getLowerIntINTTerminalRuleCall_1_3_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__MultiplicityCS__UpperIntAssignment_1_3_2_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getMultiplicityCSAccess().getUpperIntINTTerminalRuleCall_1_3_2_0_0()); }
		RULE_INT
		{ after(grammarAccess.getMultiplicityCSAccess().getUpperIntINTTerminalRuleCall_1_3_2_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__MultiplicityCS__UpperMultAssignment_1_3_2_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getMultiplicityCSAccess().getUpperMultAsteriskKeyword_1_3_2_1_0()); }
		(
			{ before(grammarAccess.getMultiplicityCSAccess().getUpperMultAsteriskKeyword_1_3_2_1_0()); }
			'*'
			{ after(grammarAccess.getMultiplicityCSAccess().getUpperMultAsteriskKeyword_1_3_2_1_0()); }
		)
		{ after(grammarAccess.getMultiplicityCSAccess().getUpperMultAsteriskKeyword_1_3_2_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__OperationCS__NameAssignment_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getOperationCSAccess().getNameIDTerminalRuleCall_1_0()); }
		RULE_ID
		{ after(grammarAccess.getOperationCSAccess().getNameIDTerminalRuleCall_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__OperationCS__ParamsAssignment_3_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getOperationCSAccess().getParamsParameterCSParserRuleCall_3_0_0()); }
		ruleParameterCS
		{ after(grammarAccess.getOperationCSAccess().getParamsParameterCSParserRuleCall_3_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__OperationCS__ParamsAssignment_3_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getOperationCSAccess().getParamsParameterCSParserRuleCall_3_1_1_0()); }
		ruleParameterCS
		{ after(grammarAccess.getOperationCSAccess().getParamsParameterCSParserRuleCall_3_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__OperationCS__ResultRefAssignment_6
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getOperationCSAccess().getResultRefPathNameCSParserRuleCall_6_0()); }
		rulePathNameCS
		{ after(grammarAccess.getOperationCSAccess().getResultRefPathNameCSParserRuleCall_6_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__OperationCS__BodyAssignment_8
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getOperationCSAccess().getBodyExpCSParserRuleCall_8_0()); }
		ruleExpCS
		{ after(grammarAccess.getOperationCSAccess().getBodyExpCSParserRuleCall_8_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__ParameterCS__NameAssignment_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getParameterCSAccess().getNameIDTerminalRuleCall_0_0()); }
		RULE_ID
		{ after(grammarAccess.getParameterCSAccess().getNameIDTerminalRuleCall_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__ParameterCS__TypeRefAssignment_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getParameterCSAccess().getTypeRefPathNameCSParserRuleCall_2_0()); }
		rulePathNameCS
		{ after(grammarAccess.getParameterCSAccess().getTypeRefPathNameCSParserRuleCall_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__ConstraintsDefCS__TypeRefAssignment_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getConstraintsDefCSAccess().getTypeRefPathNameCSParserRuleCall_1_0()); }
		rulePathNameCS
		{ after(grammarAccess.getConstraintsDefCSAccess().getTypeRefPathNameCSParserRuleCall_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__ConstraintsDefCS__InvariantsAssignment_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getConstraintsDefCSAccess().getInvariantsInvariantCSParserRuleCall_3_0()); }
		ruleInvariantCS
		{ after(grammarAccess.getConstraintsDefCSAccess().getInvariantsInvariantCSParserRuleCall_3_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__InvariantCS__ExpAssignment_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getInvariantCSAccess().getExpExpCSParserRuleCall_2_0()); }
		ruleExpCS
		{ after(grammarAccess.getInvariantCSAccess().getExpExpCSParserRuleCall_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EqualityExpCS__OpNameAssignment_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEqualityExpCSAccess().getOpNameAlternatives_1_1_0()); }
		(rule__EqualityExpCS__OpNameAlternatives_1_1_0)
		{ after(grammarAccess.getEqualityExpCSAccess().getOpNameAlternatives_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EqualityExpCS__RightAssignment_1_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEqualityExpCSAccess().getRightCallExpCSParserRuleCall_1_2_0()); }
		ruleCallExpCS
		{ after(grammarAccess.getEqualityExpCSAccess().getRightCallExpCSParserRuleCall_1_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__CallExpCS__OpNameAssignment_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getCallExpCSAccess().getOpNameAlternatives_1_1_0()); }
		(rule__CallExpCS__OpNameAlternatives_1_1_0)
		{ after(grammarAccess.getCallExpCSAccess().getOpNameAlternatives_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__CallExpCS__NavExpAssignment_1_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getCallExpCSAccess().getNavExpNavigationExpCSParserRuleCall_1_2_0()); }
		ruleNavigationExpCS
		{ after(grammarAccess.getCallExpCSAccess().getNavExpNavigationExpCSParserRuleCall_1_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__CollectExpCS__ItVarAssignment_2_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getCollectExpCSAccess().getItVarIteratorVarCSParserRuleCall_2_0_0()); }
		ruleIteratorVarCS
		{ after(grammarAccess.getCollectExpCSAccess().getItVarIteratorVarCSParserRuleCall_2_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__CollectExpCS__ExpAssignment_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getCollectExpCSAccess().getExpExpCSParserRuleCall_3_0()); }
		ruleExpCS
		{ after(grammarAccess.getCollectExpCSAccess().getExpExpCSParserRuleCall_3_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__IteratorVarCS__ItNameAssignment_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getIteratorVarCSAccess().getItNameIDTerminalRuleCall_0_0()); }
		RULE_ID
		{ after(grammarAccess.getIteratorVarCSAccess().getItNameIDTerminalRuleCall_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__IteratorVarCS__ItTypeAssignment_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getIteratorVarCSAccess().getItTypePathNameCSParserRuleCall_1_1_0()); }
		rulePathNameCS
		{ after(grammarAccess.getIteratorVarCSAccess().getItTypePathNameCSParserRuleCall_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__IterateExpCS__ItVarAssignment_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getIterateExpCSAccess().getItVarIteratorVarCSParserRuleCall_2_0()); }
		ruleIteratorVarCS
		{ after(grammarAccess.getIterateExpCSAccess().getItVarIteratorVarCSParserRuleCall_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__IterateExpCS__AccVarAssignment_4
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getIterateExpCSAccess().getAccVarAccVarCSParserRuleCall_4_0()); }
		ruleAccVarCS
		{ after(grammarAccess.getIterateExpCSAccess().getAccVarAccVarCSParserRuleCall_4_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__IterateExpCS__ExpAssignment_6
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getIterateExpCSAccess().getExpExpCSParserRuleCall_6_0()); }
		ruleExpCS
		{ after(grammarAccess.getIterateExpCSAccess().getExpExpCSParserRuleCall_6_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__AccVarCS__AccNameAssignment_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getAccVarCSAccess().getAccNameIDTerminalRuleCall_0_0()); }
		RULE_ID
		{ after(grammarAccess.getAccVarCSAccess().getAccNameIDTerminalRuleCall_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__AccVarCS__AccTypeAssignment_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getAccVarCSAccess().getAccTypePathNameCSParserRuleCall_1_1_0()); }
		rulePathNameCS
		{ after(grammarAccess.getAccVarCSAccess().getAccTypePathNameCSParserRuleCall_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__AccVarCS__AccInitExpAssignment_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getAccVarCSAccess().getAccInitExpExpCSParserRuleCall_3_0()); }
		ruleExpCS
		{ after(grammarAccess.getAccVarCSAccess().getAccInitExpExpCSParserRuleCall_3_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__NameExpCS__ExpNameAssignment_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getNameExpCSAccess().getExpNamePathNameCSParserRuleCall_0_0()); }
		rulePathNameCS
		{ after(grammarAccess.getNameExpCSAccess().getExpNamePathNameCSParserRuleCall_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__NameExpCS__RoundedBracketsAssignment_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getNameExpCSAccess().getRoundedBracketsRoundedBracketClauseCSParserRuleCall_1_0()); }
		ruleRoundedBracketClauseCS
		{ after(grammarAccess.getNameExpCSAccess().getRoundedBracketsRoundedBracketClauseCSParserRuleCall_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__RoundedBracketClauseCS__ArgsAssignment_2_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getRoundedBracketClauseCSAccess().getArgsExpCSParserRuleCall_2_0_0()); }
		ruleExpCS
		{ after(grammarAccess.getRoundedBracketClauseCSAccess().getArgsExpCSParserRuleCall_2_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__RoundedBracketClauseCS__ArgsAssignment_2_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getRoundedBracketClauseCSAccess().getArgsExpCSParserRuleCall_2_1_1_0()); }
		ruleExpCS
		{ after(grammarAccess.getRoundedBracketClauseCSAccess().getArgsExpCSParserRuleCall_2_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__IntLiteralExpCS__IntSymbolAssignment
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getIntLiteralExpCSAccess().getIntSymbolINTTerminalRuleCall_0()); }
		RULE_INT
		{ after(grammarAccess.getIntLiteralExpCSAccess().getIntSymbolINTTerminalRuleCall_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BooleanLiteralExpCS__BoolSymbolAssignment_1_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBooleanLiteralExpCSAccess().getBoolSymbolTrueKeyword_1_0_0()); }
		(
			{ before(grammarAccess.getBooleanLiteralExpCSAccess().getBoolSymbolTrueKeyword_1_0_0()); }
			'true'
			{ after(grammarAccess.getBooleanLiteralExpCSAccess().getBoolSymbolTrueKeyword_1_0_0()); }
		)
		{ after(grammarAccess.getBooleanLiteralExpCSAccess().getBoolSymbolTrueKeyword_1_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__CollectionLiteralExpCS__KindAssignment_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getCollectionLiteralExpCSAccess().getKindCollectionKindCSEnumRuleCall_0_0()); }
		ruleCollectionKindCS
		{ after(grammarAccess.getCollectionLiteralExpCSAccess().getKindCollectionKindCSEnumRuleCall_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__CollectionLiteralExpCS__PartsAssignment_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getCollectionLiteralExpCSAccess().getPartsCollectionLiteralPartCSParserRuleCall_2_0()); }
		ruleCollectionLiteralPartCS
		{ after(grammarAccess.getCollectionLiteralExpCSAccess().getPartsCollectionLiteralPartCSParserRuleCall_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__CollectionLiteralPartCS__FirstAssignment_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getCollectionLiteralPartCSAccess().getFirstExpCSParserRuleCall_0_0()); }
		ruleExpCS
		{ after(grammarAccess.getCollectionLiteralPartCSAccess().getFirstExpCSParserRuleCall_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__CollectionLiteralPartCS__LastAssignment_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getCollectionLiteralPartCSAccess().getLastExpCSParserRuleCall_1_1_0()); }
		ruleExpCS
		{ after(grammarAccess.getCollectionLiteralPartCSAccess().getLastExpCSParserRuleCall_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__LetExpCS__LetVarsAssignment_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getLetExpCSAccess().getLetVarsLetVarCSParserRuleCall_1_0()); }
		ruleLetVarCS
		{ after(grammarAccess.getLetExpCSAccess().getLetVarsLetVarCSParserRuleCall_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__LetExpCS__LetVarsAssignment_2_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getLetExpCSAccess().getLetVarsLetVarCSParserRuleCall_2_1_0()); }
		ruleLetVarCS
		{ after(grammarAccess.getLetExpCSAccess().getLetVarsLetVarCSParserRuleCall_2_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__LetExpCS__InExpAssignment_4
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getLetExpCSAccess().getInExpExpCSParserRuleCall_4_0()); }
		ruleExpCS
		{ after(grammarAccess.getLetExpCSAccess().getInExpExpCSParserRuleCall_4_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__LetVarCS__NameAssignment_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getLetVarCSAccess().getNameIDTerminalRuleCall_0_0()); }
		RULE_ID
		{ after(grammarAccess.getLetVarCSAccess().getNameIDTerminalRuleCall_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__LetVarCS__TypeRefAssignment_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getLetVarCSAccess().getTypeRefPathNameCSParserRuleCall_1_1_0()); }
		rulePathNameCS
		{ after(grammarAccess.getLetVarCSAccess().getTypeRefPathNameCSParserRuleCall_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__LetVarCS__InitExpAssignment_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getLetVarCSAccess().getInitExpExpCSParserRuleCall_3_0()); }
		ruleExpCS
		{ after(grammarAccess.getLetVarCSAccess().getInitExpExpCSParserRuleCall_3_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__PathNameCS__PathElementsAssignment_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getPathNameCSAccess().getPathElementsPathElementCSParserRuleCall_0_0()); }
		rulePathElementCS
		{ after(grammarAccess.getPathNameCSAccess().getPathElementsPathElementCSParserRuleCall_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__PathNameCS__PathElementsAssignment_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getPathNameCSAccess().getPathElementsPathElementCSParserRuleCall_1_1_0()); }
		rulePathElementCS
		{ after(grammarAccess.getPathNameCSAccess().getPathElementsPathElementCSParserRuleCall_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__PathElementCS__ElementNameAssignment
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getPathElementCSAccess().getElementNameIDTerminalRuleCall_0()); }
		RULE_ID
		{ after(grammarAccess.getPathElementCSAccess().getElementNameIDTerminalRuleCall_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

RULE_ID : '^'? ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;

RULE_INT : ('0'..'9')+;

RULE_STRING : ('"' ('\\' .|~(('\\'|'"')))* '"'|'\'' ('\\' .|~(('\\'|'\'')))* '\'');

RULE_ML_COMMENT : '/*' ( options {greedy=false;} : . )*'*/';

RULE_SL_COMMENT : '//' ~(('\n'|'\r'))* ('\r'? '\n')?;

RULE_WS : (' '|'\t'|'\r'|'\n')+;

RULE_ANY_OTHER : .;
