/**
 * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf), Loetz GmbH&Co.KG (Heidelberg)
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *         Florian Pirchner - Initial implementation
 *
 * generated by Xtext 2.11.0
 */
grammar InternalEntityGrammar;

options {
	superClass=AbstractInternalContentAssistParser;
	backtrack=true;
}

@lexer::header {
package org.eclipse.osbp.dsl.entity.xtext.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.osbp.dsl.entity.xtext.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.osbp.dsl.entity.xtext.services.EntityGrammarGrammarAccess;

}
@parser::members {
	private EntityGrammarGrammarAccess grammarAccess;

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

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

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

// Entry rule entryRuleEntityModel
entryRuleEntityModel
:
{ before(grammarAccess.getEntityModelRule()); }
	 ruleEntityModel
{ after(grammarAccess.getEntityModelRule()); } 
	 EOF 
;

// Rule EntityModel
ruleEntityModel 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getEntityModelAccess().getGroup()); }
		(rule__EntityModel__Group__0)
		{ after(grammarAccess.getEntityModelAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleClass
entryRuleClass
:
{ before(grammarAccess.getClassRule()); }
	 ruleClass
{ after(grammarAccess.getClassRule()); } 
	 EOF 
;

// Rule Class
ruleClass 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getClassAccess().getGroup()); }
		(rule__Class__Group__0)
		{ after(grammarAccess.getClassAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleIndex
entryRuleIndex
:
{ before(grammarAccess.getIndexRule()); }
	 ruleIndex
{ after(grammarAccess.getIndexRule()); } 
	 EOF 
;

// Rule Index
ruleIndex 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getIndexAccess().getGroup()); }
		(rule__Index__Group__0)
		{ after(grammarAccess.getIndexAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleEntityPersistenceInfo
entryRuleEntityPersistenceInfo
:
{ before(grammarAccess.getEntityPersistenceInfoRule()); }
	 ruleEntityPersistenceInfo
{ after(grammarAccess.getEntityPersistenceInfoRule()); } 
	 EOF 
;

// Rule EntityPersistenceInfo
ruleEntityPersistenceInfo 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getEntityPersistenceInfoAccess().getGroup()); }
		(rule__EntityPersistenceInfo__Group__0)
		{ after(grammarAccess.getEntityPersistenceInfoAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleColumnPersistenceInfo
entryRuleColumnPersistenceInfo
:
{ before(grammarAccess.getColumnPersistenceInfoRule()); }
	 ruleColumnPersistenceInfo
{ after(grammarAccess.getColumnPersistenceInfoRule()); } 
	 EOF 
;

// Rule ColumnPersistenceInfo
ruleColumnPersistenceInfo 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getColumnPersistenceInfoAccess().getGroup()); }
		(rule__ColumnPersistenceInfo__Group__0)
		{ after(grammarAccess.getColumnPersistenceInfoAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleEntityFeature
entryRuleEntityFeature
:
{ before(grammarAccess.getEntityFeatureRule()); }
	 ruleEntityFeature
{ after(grammarAccess.getEntityFeatureRule()); } 
	 EOF 
;

// Rule EntityFeature
ruleEntityFeature 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getGroup()); }
		(rule__EntityFeature__Group__0)
		{ after(grammarAccess.getEntityFeatureAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleKanbanStateDetail
entryRuleKanbanStateDetail
:
{ before(grammarAccess.getKanbanStateDetailRule()); }
	 ruleKanbanStateDetail
{ after(grammarAccess.getKanbanStateDetailRule()); } 
	 EOF 
;

// Rule KanbanStateDetail
ruleKanbanStateDetail 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getKanbanStateDetailAccess().getGroup()); }
		(rule__KanbanStateDetail__Group__0)
		{ after(grammarAccess.getKanbanStateDetailAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleKanbanEnumInfo
entryRuleKanbanEnumInfo
:
{ before(grammarAccess.getKanbanEnumInfoRule()); }
	 ruleKanbanEnumInfo
{ after(grammarAccess.getKanbanEnumInfoRule()); } 
	 EOF 
;

// Rule KanbanEnumInfo
ruleKanbanEnumInfo 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getKanbanEnumInfoAccess().getGroup()); }
		(rule__KanbanEnumInfo__Group__0)
		{ after(grammarAccess.getKanbanEnumInfoAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleBeanFeature
entryRuleBeanFeature
:
{ before(grammarAccess.getBeanFeatureRule()); }
	 ruleBeanFeature
{ after(grammarAccess.getBeanFeatureRule()); } 
	 EOF 
;

// Rule BeanFeature
ruleBeanFeature 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getBeanFeatureAccess().getGroup()); }
		(rule__BeanFeature__Group__0)
		{ after(grammarAccess.getBeanFeatureAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleEntitySuperIndex
entryRuleEntitySuperIndex
:
{ before(grammarAccess.getEntitySuperIndexRule()); }
	 ruleEntitySuperIndex
{ after(grammarAccess.getEntitySuperIndexRule()); } 
	 EOF 
;

// Rule EntitySuperIndex
ruleEntitySuperIndex 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getEntitySuperIndexAccess().getGroup()); }
		(rule__EntitySuperIndex__Group__0)
		{ after(grammarAccess.getEntitySuperIndexAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleEntitySuperIndexAttribute
entryRuleEntitySuperIndexAttribute
:
{ before(grammarAccess.getEntitySuperIndexAttributeRule()); }
	 ruleEntitySuperIndexAttribute
{ after(grammarAccess.getEntitySuperIndexAttributeRule()); } 
	 EOF 
;

// Rule EntitySuperIndexAttribute
ruleEntitySuperIndexAttribute 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getEntitySuperIndexAttributeAccess().getGroup()); }
		(rule__EntitySuperIndexAttribute__Group__0)
		{ after(grammarAccess.getEntitySuperIndexAttributeAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleEntityFeaturePathSegment
entryRuleEntityFeaturePathSegment
:
{ before(grammarAccess.getEntityFeaturePathSegmentRule()); }
	 ruleEntityFeaturePathSegment
{ after(grammarAccess.getEntityFeaturePathSegmentRule()); } 
	 EOF 
;

// Rule EntityFeaturePathSegment
ruleEntityFeaturePathSegment 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getEntityFeaturePathSegmentAccess().getGroup()); }
		(rule__EntityFeaturePathSegment__Group__0)
		{ after(grammarAccess.getEntityFeaturePathSegmentAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleEntityInheritanceStrategy
entryRuleEntityInheritanceStrategy
:
{ before(grammarAccess.getEntityInheritanceStrategyRule()); }
	 ruleEntityInheritanceStrategy
{ after(grammarAccess.getEntityInheritanceStrategyRule()); } 
	 EOF 
;

// Rule EntityInheritanceStrategy
ruleEntityInheritanceStrategy 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getEntityInheritanceStrategyAccess().getAlternatives()); }
		(rule__EntityInheritanceStrategy__Alternatives)
		{ after(grammarAccess.getEntityInheritanceStrategyAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleTablePerClassStrategy
entryRuleTablePerClassStrategy
:
{ before(grammarAccess.getTablePerClassStrategyRule()); }
	 ruleTablePerClassStrategy
{ after(grammarAccess.getTablePerClassStrategyRule()); } 
	 EOF 
;

// Rule TablePerClassStrategy
ruleTablePerClassStrategy 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getTablePerClassStrategyAccess().getGroup()); }
		(rule__TablePerClassStrategy__Group__0)
		{ after(grammarAccess.getTablePerClassStrategyAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleTablePerSubclassStrategy
entryRuleTablePerSubclassStrategy
:
{ before(grammarAccess.getTablePerSubclassStrategyRule()); }
	 ruleTablePerSubclassStrategy
{ after(grammarAccess.getTablePerSubclassStrategyRule()); } 
	 EOF 
;

// Rule TablePerSubclassStrategy
ruleTablePerSubclassStrategy 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getTablePerSubclassStrategyAccess().getGroup()); }
		(rule__TablePerSubclassStrategy__Group__0)
		{ after(grammarAccess.getTablePerSubclassStrategyAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleTRANSLATABLEID
entryRuleTRANSLATABLEID
:
{ before(grammarAccess.getTRANSLATABLEIDRule()); }
	 ruleTRANSLATABLEID
{ after(grammarAccess.getTRANSLATABLEIDRule()); } 
	 EOF 
;

// Rule TRANSLATABLEID
ruleTRANSLATABLEID 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getTRANSLATABLEIDAccess().getValidIDWithKeywordsParserRuleCall()); }
		ruleValidIDWithKeywords
		{ after(grammarAccess.getTRANSLATABLEIDAccess().getValidIDWithKeywordsParserRuleCall()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleTypedPackage
entryRuleTypedPackage
:
{ before(grammarAccess.getTypedPackageRule()); }
	 ruleTypedPackage
{ after(grammarAccess.getTypedPackageRule()); } 
	 EOF 
;

// Rule TypedPackage
ruleTypedPackage 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getTypedPackageAccess().getGroup()); }
		(rule__TypedPackage__Group__0)
		{ after(grammarAccess.getTypedPackageAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleType
entryRuleType
:
{ before(grammarAccess.getTypeRule()); }
	 ruleType
{ after(grammarAccess.getTypeRule()); } 
	 EOF 
;

// Rule Type
ruleType 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getTypeAccess().getAlternatives()); }
		(rule__Type__Alternatives)
		{ after(grammarAccess.getTypeAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleDataType
entryRuleDataType
:
{ before(grammarAccess.getDataTypeRule()); }
	 ruleDataType
{ after(grammarAccess.getDataTypeRule()); } 
	 EOF 
;

// Rule DataType
ruleDataType 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getDataTypeAccess().getGroup()); }
		(rule__DataType__Group__0)
		{ after(grammarAccess.getDataTypeAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleAllConstraints
entryRuleAllConstraints
:
{ before(grammarAccess.getAllConstraintsRule()); }
	 ruleAllConstraints
{ after(grammarAccess.getAllConstraintsRule()); } 
	 EOF 
;

// Rule AllConstraints
ruleAllConstraints 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getAllConstraintsAccess().getAlternatives()); }
		(rule__AllConstraints__Alternatives)
		{ after(grammarAccess.getAllConstraintsAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleDataTypeConstraint
entryRuleDataTypeConstraint
:
{ before(grammarAccess.getDataTypeConstraintRule()); }
	 ruleDataTypeConstraint
{ after(grammarAccess.getDataTypeConstraintRule()); } 
	 EOF 
;

// Rule DataTypeConstraint
ruleDataTypeConstraint 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getDataTypeConstraintAccess().getAlternatives()); }
		(rule__DataTypeConstraint__Alternatives)
		{ after(grammarAccess.getDataTypeConstraintAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleDateConstraint
entryRuleDateConstraint
:
{ before(grammarAccess.getDateConstraintRule()); }
	 ruleDateConstraint
{ after(grammarAccess.getDateConstraintRule()); } 
	 EOF 
;

// Rule DateConstraint
ruleDateConstraint 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getDateConstraintAccess().getAlternatives()); }
		(rule__DateConstraint__Alternatives)
		{ after(grammarAccess.getDateConstraintAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleBlobTypeConstraint
entryRuleBlobTypeConstraint
:
{ before(grammarAccess.getBlobTypeConstraintRule()); }
	 ruleBlobTypeConstraint
{ after(grammarAccess.getBlobTypeConstraintRule()); } 
	 EOF 
;

// Rule BlobTypeConstraint
ruleBlobTypeConstraint 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getBlobTypeConstraintAccess().getAlternatives()); }
		(rule__BlobTypeConstraint__Alternatives)
		{ after(grammarAccess.getBlobTypeConstraintAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleDtCAssertFalse
entryRuleDtCAssertFalse
:
{ before(grammarAccess.getDtCAssertFalseRule()); }
	 ruleDtCAssertFalse
{ after(grammarAccess.getDtCAssertFalseRule()); } 
	 EOF 
;

// Rule DtCAssertFalse
ruleDtCAssertFalse 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getDtCAssertFalseAccess().getGroup()); }
		(rule__DtCAssertFalse__Group__0)
		{ after(grammarAccess.getDtCAssertFalseAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleDtCAssertTrue
entryRuleDtCAssertTrue
:
{ before(grammarAccess.getDtCAssertTrueRule()); }
	 ruleDtCAssertTrue
{ after(grammarAccess.getDtCAssertTrueRule()); } 
	 EOF 
;

// Rule DtCAssertTrue
ruleDtCAssertTrue 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getDtCAssertTrueAccess().getGroup()); }
		(rule__DtCAssertTrue__Group__0)
		{ after(grammarAccess.getDtCAssertTrueAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleDtCDecimalMax
entryRuleDtCDecimalMax
:
{ before(grammarAccess.getDtCDecimalMaxRule()); }
	 ruleDtCDecimalMax
{ after(grammarAccess.getDtCDecimalMaxRule()); } 
	 EOF 
;

// Rule DtCDecimalMax
ruleDtCDecimalMax 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getDtCDecimalMaxAccess().getGroup()); }
		(rule__DtCDecimalMax__Group__0)
		{ after(grammarAccess.getDtCDecimalMaxAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleDtCDecimalMin
entryRuleDtCDecimalMin
:
{ before(grammarAccess.getDtCDecimalMinRule()); }
	 ruleDtCDecimalMin
{ after(grammarAccess.getDtCDecimalMinRule()); } 
	 EOF 
;

// Rule DtCDecimalMin
ruleDtCDecimalMin 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getDtCDecimalMinAccess().getGroup()); }
		(rule__DtCDecimalMin__Group__0)
		{ after(grammarAccess.getDtCDecimalMinAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleDtCDigits
entryRuleDtCDigits
:
{ before(grammarAccess.getDtCDigitsRule()); }
	 ruleDtCDigits
{ after(grammarAccess.getDtCDigitsRule()); } 
	 EOF 
;

// Rule DtCDigits
ruleDtCDigits 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getDtCDigitsAccess().getGroup()); }
		(rule__DtCDigits__Group__0)
		{ after(grammarAccess.getDtCDigitsAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleDtCFuture
entryRuleDtCFuture
:
{ before(grammarAccess.getDtCFutureRule()); }
	 ruleDtCFuture
{ after(grammarAccess.getDtCFutureRule()); } 
	 EOF 
;

// Rule DtCFuture
ruleDtCFuture 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getDtCFutureAccess().getGroup()); }
		(rule__DtCFuture__Group__0)
		{ after(grammarAccess.getDtCFutureAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleDtCPast
entryRuleDtCPast
:
{ before(grammarAccess.getDtCPastRule()); }
	 ruleDtCPast
{ after(grammarAccess.getDtCPastRule()); } 
	 EOF 
;

// Rule DtCPast
ruleDtCPast 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getDtCPastAccess().getGroup()); }
		(rule__DtCPast__Group__0)
		{ after(grammarAccess.getDtCPastAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleDtCNumericMax
entryRuleDtCNumericMax
:
{ before(grammarAccess.getDtCNumericMaxRule()); }
	 ruleDtCNumericMax
{ after(grammarAccess.getDtCNumericMaxRule()); } 
	 EOF 
;

// Rule DtCNumericMax
ruleDtCNumericMax 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getDtCNumericMaxAccess().getGroup()); }
		(rule__DtCNumericMax__Group__0)
		{ after(grammarAccess.getDtCNumericMaxAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleDtCNumericMin
entryRuleDtCNumericMin
:
{ before(grammarAccess.getDtCNumericMinRule()); }
	 ruleDtCNumericMin
{ after(grammarAccess.getDtCNumericMinRule()); } 
	 EOF 
;

// Rule DtCNumericMin
ruleDtCNumericMin 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getDtCNumericMinAccess().getGroup()); }
		(rule__DtCNumericMin__Group__0)
		{ after(grammarAccess.getDtCNumericMinAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleDtCNotNull
entryRuleDtCNotNull
:
{ before(grammarAccess.getDtCNotNullRule()); }
	 ruleDtCNotNull
{ after(grammarAccess.getDtCNotNullRule()); } 
	 EOF 
;

// Rule DtCNotNull
ruleDtCNotNull 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getDtCNotNullAccess().getGroup()); }
		(rule__DtCNotNull__Group__0)
		{ after(grammarAccess.getDtCNotNullAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleDtCNull
entryRuleDtCNull
:
{ before(grammarAccess.getDtCNullRule()); }
	 ruleDtCNull
{ after(grammarAccess.getDtCNullRule()); } 
	 EOF 
;

// Rule DtCNull
ruleDtCNull 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getDtCNullAccess().getGroup()); }
		(rule__DtCNull__Group__0)
		{ after(grammarAccess.getDtCNullAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleDtCRegEx
entryRuleDtCRegEx
:
{ before(grammarAccess.getDtCRegExRule()); }
	 ruleDtCRegEx
{ after(grammarAccess.getDtCRegExRule()); } 
	 EOF 
;

// Rule DtCRegEx
ruleDtCRegEx 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getDtCRegExAccess().getGroup()); }
		(rule__DtCRegEx__Group__0)
		{ after(grammarAccess.getDtCRegExAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleDtCSize
entryRuleDtCSize
:
{ before(grammarAccess.getDtCSizeRule()); }
	 ruleDtCSize
{ after(grammarAccess.getDtCSizeRule()); } 
	 EOF 
;

// Rule DtCSize
ruleDtCSize 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getDtCSizeAccess().getGroup()); }
		(rule__DtCSize__Group__0)
		{ after(grammarAccess.getDtCSizeAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleScalarType
entryRuleScalarType
:
{ before(grammarAccess.getScalarTypeRule()); }
	 ruleScalarType
{ after(grammarAccess.getScalarTypeRule()); } 
	 EOF 
;

// Rule ScalarType
ruleScalarType 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getScalarTypeAccess().getAlternatives()); }
		(rule__ScalarType__Alternatives)
		{ after(grammarAccess.getScalarTypeAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleEnum
entryRuleEnum
:
{ before(grammarAccess.getEnumRule()); }
	 ruleEnum
{ after(grammarAccess.getEnumRule()); } 
	 EOF 
;

// Rule Enum
ruleEnum 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getEnumAccess().getGroup()); }
		(rule__Enum__Group__0)
		{ after(grammarAccess.getEnumAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleEnumLiteral
entryRuleEnumLiteral
:
{ before(grammarAccess.getEnumLiteralRule()); }
	 ruleEnumLiteral
{ after(grammarAccess.getEnumLiteralRule()); } 
	 EOF 
;

// Rule EnumLiteral
ruleEnumLiteral 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getEnumLiteralAccess().getGroup()); }
		(rule__EnumLiteral__Group__0)
		{ after(grammarAccess.getEnumLiteralAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleAnnotationDef
entryRuleAnnotationDef
:
{ before(grammarAccess.getAnnotationDefRule()); }
	 ruleAnnotationDef
{ after(grammarAccess.getAnnotationDefRule()); } 
	 EOF 
;

// Rule AnnotationDef
ruleAnnotationDef 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getAnnotationDefAccess().getGroup()); }
		(rule__AnnotationDef__Group__0)
		{ after(grammarAccess.getAnnotationDefAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleResultFilters
entryRuleResultFilters
:
{ before(grammarAccess.getResultFiltersRule()); }
	 ruleResultFilters
{ after(grammarAccess.getResultFiltersRule()); } 
	 EOF 
;

// Rule ResultFilters
ruleResultFilters 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getResultFiltersAccess().getGroup()); }
		(rule__ResultFilters__Group__0)
		{ after(grammarAccess.getResultFiltersAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleResultFilter
entryRuleResultFilter
:
{ before(grammarAccess.getResultFilterRule()); }
	 ruleResultFilter
{ after(grammarAccess.getResultFilterRule()); } 
	 EOF 
;

// Rule ResultFilter
ruleResultFilter 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getResultFilterAccess().getAttributeMatchingConstraintParserRuleCall()); }
		ruleAttributeMatchingConstraint
		{ after(grammarAccess.getResultFilterAccess().getAttributeMatchingConstraintParserRuleCall()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleAttributeMatchingConstraint
entryRuleAttributeMatchingConstraint
:
{ before(grammarAccess.getAttributeMatchingConstraintRule()); }
	 ruleAttributeMatchingConstraint
{ after(grammarAccess.getAttributeMatchingConstraintRule()); } 
	 EOF 
;

// Rule AttributeMatchingConstraint
ruleAttributeMatchingConstraint 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getAttributeMatchingConstraintAccess().getGroup()); }
		(rule__AttributeMatchingConstraint__Group__0)
		{ after(grammarAccess.getAttributeMatchingConstraintAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleKeyAndValue
entryRuleKeyAndValue
:
{ before(grammarAccess.getKeyAndValueRule()); }
	 ruleKeyAndValue
{ after(grammarAccess.getKeyAndValueRule()); } 
	 EOF 
;

// Rule KeyAndValue
ruleKeyAndValue 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getKeyAndValueAccess().getGroup()); }
		(rule__KeyAndValue__Group__0)
		{ after(grammarAccess.getKeyAndValueAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleLFQN
entryRuleLFQN
:
{ before(grammarAccess.getLFQNRule()); }
	 ruleLFQN
{ after(grammarAccess.getLFQNRule()); } 
	 EOF 
;

// Rule LFQN
ruleLFQN 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getLFQNAccess().getGroup()); }
		(rule__LFQN__Group__0)
		{ after(grammarAccess.getLFQNAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleTYPE_CROSS_REFERENCE
entryRuleTYPE_CROSS_REFERENCE
:
{ before(grammarAccess.getTYPE_CROSS_REFERENCERule()); }
	 ruleTYPE_CROSS_REFERENCE
{ after(grammarAccess.getTYPE_CROSS_REFERENCERule()); } 
	 EOF 
;

// Rule TYPE_CROSS_REFERENCE
ruleTYPE_CROSS_REFERENCE 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getTYPE_CROSS_REFERENCEAccess().getIDTerminalRuleCall()); }
		RULE_ID
		{ after(grammarAccess.getTYPE_CROSS_REFERENCEAccess().getIDTerminalRuleCall()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleValidIDWithKeywords
entryRuleValidIDWithKeywords
:
{ before(grammarAccess.getValidIDWithKeywordsRule()); }
	 ruleValidIDWithKeywords
{ after(grammarAccess.getValidIDWithKeywordsRule()); } 
	 EOF 
;

// Rule ValidIDWithKeywords
ruleValidIDWithKeywords 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getValidIDWithKeywordsAccess().getAlternatives()); }
		(rule__ValidIDWithKeywords__Alternatives)
		{ after(grammarAccess.getValidIDWithKeywordsAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleMultiplicity
entryRuleMultiplicity
:
{ before(grammarAccess.getMultiplicityRule()); }
	 ruleMultiplicity
{ after(grammarAccess.getMultiplicityRule()); } 
	 EOF 
;

// Rule Multiplicity
ruleMultiplicity 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getMultiplicityAccess().getGroup()); }
		(rule__Multiplicity__Group__0)
		{ after(grammarAccess.getMultiplicityAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleLInt
entryRuleLInt
:
{ before(grammarAccess.getLIntRule()); }
	 ruleLInt
{ after(grammarAccess.getLIntRule()); } 
	 EOF 
;

// Rule LInt
ruleLInt 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getLIntAccess().getGroup()); }
		(rule__LInt__Group__0)
		{ after(grammarAccess.getLIntAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleLDecimal
entryRuleLDecimal
:
{ before(grammarAccess.getLDecimalRule()); }
	 ruleLDecimal
{ after(grammarAccess.getLDecimalRule()); } 
	 EOF 
;

// Rule LDecimal
ruleLDecimal 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getLDecimalAccess().getGroup()); }
		(rule__LDecimal__Group__0)
		{ after(grammarAccess.getLDecimalAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXImportDeclaration
entryRuleXImportDeclaration
:
{ before(grammarAccess.getXImportDeclarationRule()); }
	 ruleXImportDeclaration
{ after(grammarAccess.getXImportDeclarationRule()); } 
	 EOF 
;

// Rule XImportDeclaration
ruleXImportDeclaration 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXImportDeclarationAccess().getGroup()); }
		(rule__XImportDeclaration__Group__0)
		{ after(grammarAccess.getXImportDeclarationAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXAnnotation
entryRuleXAnnotation
:
{ before(grammarAccess.getXAnnotationRule()); }
	 ruleXAnnotation
{ after(grammarAccess.getXAnnotationRule()); } 
	 EOF 
;

// Rule XAnnotation
ruleXAnnotation 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXAnnotationAccess().getGroup()); }
		(rule__XAnnotation__Group__0)
		{ after(grammarAccess.getXAnnotationAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXAnnotationElementValuePair
entryRuleXAnnotationElementValuePair
:
{ before(grammarAccess.getXAnnotationElementValuePairRule()); }
	 ruleXAnnotationElementValuePair
{ after(grammarAccess.getXAnnotationElementValuePairRule()); } 
	 EOF 
;

// Rule XAnnotationElementValuePair
ruleXAnnotationElementValuePair 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXAnnotationElementValuePairAccess().getGroup()); }
		(rule__XAnnotationElementValuePair__Group__0)
		{ after(grammarAccess.getXAnnotationElementValuePairAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXAnnotationElementValueOrCommaList
entryRuleXAnnotationElementValueOrCommaList
:
{ before(grammarAccess.getXAnnotationElementValueOrCommaListRule()); }
	 ruleXAnnotationElementValueOrCommaList
{ after(grammarAccess.getXAnnotationElementValueOrCommaListRule()); } 
	 EOF 
;

// Rule XAnnotationElementValueOrCommaList
ruleXAnnotationElementValueOrCommaList 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getAlternatives()); }
		(rule__XAnnotationElementValueOrCommaList__Alternatives)
		{ after(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXAnnotationElementValue
entryRuleXAnnotationElementValue
:
{ before(grammarAccess.getXAnnotationElementValueRule()); }
	 ruleXAnnotationElementValue
{ after(grammarAccess.getXAnnotationElementValueRule()); } 
	 EOF 
;

// Rule XAnnotationElementValue
ruleXAnnotationElementValue 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXAnnotationElementValueAccess().getAlternatives()); }
		(rule__XAnnotationElementValue__Alternatives)
		{ after(grammarAccess.getXAnnotationElementValueAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXAnnotationOrExpression
entryRuleXAnnotationOrExpression
:
{ before(grammarAccess.getXAnnotationOrExpressionRule()); }
	 ruleXAnnotationOrExpression
{ after(grammarAccess.getXAnnotationOrExpressionRule()); } 
	 EOF 
;

// Rule XAnnotationOrExpression
ruleXAnnotationOrExpression 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXAnnotationOrExpressionAccess().getAlternatives()); }
		(rule__XAnnotationOrExpression__Alternatives)
		{ after(grammarAccess.getXAnnotationOrExpressionAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXExpression
entryRuleXExpression
:
{ before(grammarAccess.getXExpressionRule()); }
	 ruleXExpression
{ after(grammarAccess.getXExpressionRule()); } 
	 EOF 
;

// Rule XExpression
ruleXExpression 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXExpressionAccess().getXAssignmentParserRuleCall()); }
		ruleXAssignment
		{ after(grammarAccess.getXExpressionAccess().getXAssignmentParserRuleCall()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXAssignment
entryRuleXAssignment
:
{ before(grammarAccess.getXAssignmentRule()); }
	 ruleXAssignment
{ after(grammarAccess.getXAssignmentRule()); } 
	 EOF 
;

// Rule XAssignment
ruleXAssignment 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXAssignmentAccess().getAlternatives()); }
		(rule__XAssignment__Alternatives)
		{ after(grammarAccess.getXAssignmentAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleOpSingleAssign
entryRuleOpSingleAssign
:
{ before(grammarAccess.getOpSingleAssignRule()); }
	 ruleOpSingleAssign
{ after(grammarAccess.getOpSingleAssignRule()); } 
	 EOF 
;

// Rule OpSingleAssign
ruleOpSingleAssign 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getOpSingleAssignAccess().getEqualsSignKeyword()); }
		'='
		{ after(grammarAccess.getOpSingleAssignAccess().getEqualsSignKeyword()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleOpMultiAssign
entryRuleOpMultiAssign
:
{ before(grammarAccess.getOpMultiAssignRule()); }
	 ruleOpMultiAssign
{ after(grammarAccess.getOpMultiAssignRule()); } 
	 EOF 
;

// Rule OpMultiAssign
ruleOpMultiAssign 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getOpMultiAssignAccess().getAlternatives()); }
		(rule__OpMultiAssign__Alternatives)
		{ after(grammarAccess.getOpMultiAssignAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXOrExpression
entryRuleXOrExpression
:
{ before(grammarAccess.getXOrExpressionRule()); }
	 ruleXOrExpression
{ after(grammarAccess.getXOrExpressionRule()); } 
	 EOF 
;

// Rule XOrExpression
ruleXOrExpression 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXOrExpressionAccess().getGroup()); }
		(rule__XOrExpression__Group__0)
		{ after(grammarAccess.getXOrExpressionAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleOpOr
entryRuleOpOr
:
{ before(grammarAccess.getOpOrRule()); }
	 ruleOpOr
{ after(grammarAccess.getOpOrRule()); } 
	 EOF 
;

// Rule OpOr
ruleOpOr 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getOpOrAccess().getVerticalLineVerticalLineKeyword()); }
		'||'
		{ after(grammarAccess.getOpOrAccess().getVerticalLineVerticalLineKeyword()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXAndExpression
entryRuleXAndExpression
:
{ before(grammarAccess.getXAndExpressionRule()); }
	 ruleXAndExpression
{ after(grammarAccess.getXAndExpressionRule()); } 
	 EOF 
;

// Rule XAndExpression
ruleXAndExpression 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXAndExpressionAccess().getGroup()); }
		(rule__XAndExpression__Group__0)
		{ after(grammarAccess.getXAndExpressionAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleOpAnd
entryRuleOpAnd
:
{ before(grammarAccess.getOpAndRule()); }
	 ruleOpAnd
{ after(grammarAccess.getOpAndRule()); } 
	 EOF 
;

// Rule OpAnd
ruleOpAnd 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getOpAndAccess().getAmpersandAmpersandKeyword()); }
		'&&'
		{ after(grammarAccess.getOpAndAccess().getAmpersandAmpersandKeyword()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXEqualityExpression
entryRuleXEqualityExpression
:
{ before(grammarAccess.getXEqualityExpressionRule()); }
	 ruleXEqualityExpression
{ after(grammarAccess.getXEqualityExpressionRule()); } 
	 EOF 
;

// Rule XEqualityExpression
ruleXEqualityExpression 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXEqualityExpressionAccess().getGroup()); }
		(rule__XEqualityExpression__Group__0)
		{ after(grammarAccess.getXEqualityExpressionAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleOpEquality
entryRuleOpEquality
:
{ before(grammarAccess.getOpEqualityRule()); }
	 ruleOpEquality
{ after(grammarAccess.getOpEqualityRule()); } 
	 EOF 
;

// Rule OpEquality
ruleOpEquality 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getOpEqualityAccess().getAlternatives()); }
		(rule__OpEquality__Alternatives)
		{ after(grammarAccess.getOpEqualityAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXRelationalExpression
entryRuleXRelationalExpression
:
{ before(grammarAccess.getXRelationalExpressionRule()); }
	 ruleXRelationalExpression
{ after(grammarAccess.getXRelationalExpressionRule()); } 
	 EOF 
;

// Rule XRelationalExpression
ruleXRelationalExpression 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXRelationalExpressionAccess().getGroup()); }
		(rule__XRelationalExpression__Group__0)
		{ after(grammarAccess.getXRelationalExpressionAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleOpCompare
entryRuleOpCompare
:
{ before(grammarAccess.getOpCompareRule()); }
	 ruleOpCompare
{ after(grammarAccess.getOpCompareRule()); } 
	 EOF 
;

// Rule OpCompare
ruleOpCompare 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getOpCompareAccess().getAlternatives()); }
		(rule__OpCompare__Alternatives)
		{ after(grammarAccess.getOpCompareAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXOtherOperatorExpression
entryRuleXOtherOperatorExpression
:
{ before(grammarAccess.getXOtherOperatorExpressionRule()); }
	 ruleXOtherOperatorExpression
{ after(grammarAccess.getXOtherOperatorExpressionRule()); } 
	 EOF 
;

// Rule XOtherOperatorExpression
ruleXOtherOperatorExpression 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXOtherOperatorExpressionAccess().getGroup()); }
		(rule__XOtherOperatorExpression__Group__0)
		{ after(grammarAccess.getXOtherOperatorExpressionAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleOpOther
entryRuleOpOther
:
{ before(grammarAccess.getOpOtherRule()); }
	 ruleOpOther
{ after(grammarAccess.getOpOtherRule()); } 
	 EOF 
;

// Rule OpOther
ruleOpOther 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getOpOtherAccess().getAlternatives()); }
		(rule__OpOther__Alternatives)
		{ after(grammarAccess.getOpOtherAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXAdditiveExpression
entryRuleXAdditiveExpression
:
{ before(grammarAccess.getXAdditiveExpressionRule()); }
	 ruleXAdditiveExpression
{ after(grammarAccess.getXAdditiveExpressionRule()); } 
	 EOF 
;

// Rule XAdditiveExpression
ruleXAdditiveExpression 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXAdditiveExpressionAccess().getGroup()); }
		(rule__XAdditiveExpression__Group__0)
		{ after(grammarAccess.getXAdditiveExpressionAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleOpAdd
entryRuleOpAdd
:
{ before(grammarAccess.getOpAddRule()); }
	 ruleOpAdd
{ after(grammarAccess.getOpAddRule()); } 
	 EOF 
;

// Rule OpAdd
ruleOpAdd 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getOpAddAccess().getAlternatives()); }
		(rule__OpAdd__Alternatives)
		{ after(grammarAccess.getOpAddAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXMultiplicativeExpression
entryRuleXMultiplicativeExpression
:
{ before(grammarAccess.getXMultiplicativeExpressionRule()); }
	 ruleXMultiplicativeExpression
{ after(grammarAccess.getXMultiplicativeExpressionRule()); } 
	 EOF 
;

// Rule XMultiplicativeExpression
ruleXMultiplicativeExpression 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXMultiplicativeExpressionAccess().getGroup()); }
		(rule__XMultiplicativeExpression__Group__0)
		{ after(grammarAccess.getXMultiplicativeExpressionAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleOpMulti
entryRuleOpMulti
:
{ before(grammarAccess.getOpMultiRule()); }
	 ruleOpMulti
{ after(grammarAccess.getOpMultiRule()); } 
	 EOF 
;

// Rule OpMulti
ruleOpMulti 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getOpMultiAccess().getAlternatives()); }
		(rule__OpMulti__Alternatives)
		{ after(grammarAccess.getOpMultiAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXUnaryOperation
entryRuleXUnaryOperation
:
{ before(grammarAccess.getXUnaryOperationRule()); }
	 ruleXUnaryOperation
{ after(grammarAccess.getXUnaryOperationRule()); } 
	 EOF 
;

// Rule XUnaryOperation
ruleXUnaryOperation 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXUnaryOperationAccess().getAlternatives()); }
		(rule__XUnaryOperation__Alternatives)
		{ after(grammarAccess.getXUnaryOperationAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleOpUnary
entryRuleOpUnary
:
{ before(grammarAccess.getOpUnaryRule()); }
	 ruleOpUnary
{ after(grammarAccess.getOpUnaryRule()); } 
	 EOF 
;

// Rule OpUnary
ruleOpUnary 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getOpUnaryAccess().getAlternatives()); }
		(rule__OpUnary__Alternatives)
		{ after(grammarAccess.getOpUnaryAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXCastedExpression
entryRuleXCastedExpression
:
{ before(grammarAccess.getXCastedExpressionRule()); }
	 ruleXCastedExpression
{ after(grammarAccess.getXCastedExpressionRule()); } 
	 EOF 
;

// Rule XCastedExpression
ruleXCastedExpression 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXCastedExpressionAccess().getGroup()); }
		(rule__XCastedExpression__Group__0)
		{ after(grammarAccess.getXCastedExpressionAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXPostfixOperation
entryRuleXPostfixOperation
:
{ before(grammarAccess.getXPostfixOperationRule()); }
	 ruleXPostfixOperation
{ after(grammarAccess.getXPostfixOperationRule()); } 
	 EOF 
;

// Rule XPostfixOperation
ruleXPostfixOperation 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXPostfixOperationAccess().getGroup()); }
		(rule__XPostfixOperation__Group__0)
		{ after(grammarAccess.getXPostfixOperationAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleOpPostfix
entryRuleOpPostfix
:
{ before(grammarAccess.getOpPostfixRule()); }
	 ruleOpPostfix
{ after(grammarAccess.getOpPostfixRule()); } 
	 EOF 
;

// Rule OpPostfix
ruleOpPostfix 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getOpPostfixAccess().getAlternatives()); }
		(rule__OpPostfix__Alternatives)
		{ after(grammarAccess.getOpPostfixAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXMemberFeatureCall
entryRuleXMemberFeatureCall
:
{ before(grammarAccess.getXMemberFeatureCallRule()); }
	 ruleXMemberFeatureCall
{ after(grammarAccess.getXMemberFeatureCallRule()); } 
	 EOF 
;

// Rule XMemberFeatureCall
ruleXMemberFeatureCall 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXMemberFeatureCallAccess().getGroup()); }
		(rule__XMemberFeatureCall__Group__0)
		{ after(grammarAccess.getXMemberFeatureCallAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXPrimaryExpression
entryRuleXPrimaryExpression
:
{ before(grammarAccess.getXPrimaryExpressionRule()); }
	 ruleXPrimaryExpression
{ after(grammarAccess.getXPrimaryExpressionRule()); } 
	 EOF 
;

// Rule XPrimaryExpression
ruleXPrimaryExpression 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXPrimaryExpressionAccess().getAlternatives()); }
		(rule__XPrimaryExpression__Alternatives)
		{ after(grammarAccess.getXPrimaryExpressionAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXLiteral
entryRuleXLiteral
:
{ before(grammarAccess.getXLiteralRule()); }
	 ruleXLiteral
{ after(grammarAccess.getXLiteralRule()); } 
	 EOF 
;

// Rule XLiteral
ruleXLiteral 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXLiteralAccess().getAlternatives()); }
		(rule__XLiteral__Alternatives)
		{ after(grammarAccess.getXLiteralAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXCollectionLiteral
entryRuleXCollectionLiteral
:
{ before(grammarAccess.getXCollectionLiteralRule()); }
	 ruleXCollectionLiteral
{ after(grammarAccess.getXCollectionLiteralRule()); } 
	 EOF 
;

// Rule XCollectionLiteral
ruleXCollectionLiteral 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXCollectionLiteralAccess().getAlternatives()); }
		(rule__XCollectionLiteral__Alternatives)
		{ after(grammarAccess.getXCollectionLiteralAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXSetLiteral
entryRuleXSetLiteral
:
{ before(grammarAccess.getXSetLiteralRule()); }
	 ruleXSetLiteral
{ after(grammarAccess.getXSetLiteralRule()); } 
	 EOF 
;

// Rule XSetLiteral
ruleXSetLiteral 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXSetLiteralAccess().getGroup()); }
		(rule__XSetLiteral__Group__0)
		{ after(grammarAccess.getXSetLiteralAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXListLiteral
entryRuleXListLiteral
:
{ before(grammarAccess.getXListLiteralRule()); }
	 ruleXListLiteral
{ after(grammarAccess.getXListLiteralRule()); } 
	 EOF 
;

// Rule XListLiteral
ruleXListLiteral 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXListLiteralAccess().getGroup()); }
		(rule__XListLiteral__Group__0)
		{ after(grammarAccess.getXListLiteralAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXClosure
entryRuleXClosure
:
{ before(grammarAccess.getXClosureRule()); }
	 ruleXClosure
{ after(grammarAccess.getXClosureRule()); } 
	 EOF 
;

// Rule XClosure
ruleXClosure 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXClosureAccess().getGroup()); }
		(rule__XClosure__Group__0)
		{ after(grammarAccess.getXClosureAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXExpressionInClosure
entryRuleXExpressionInClosure
:
{ before(grammarAccess.getXExpressionInClosureRule()); }
	 ruleXExpressionInClosure
{ after(grammarAccess.getXExpressionInClosureRule()); } 
	 EOF 
;

// Rule XExpressionInClosure
ruleXExpressionInClosure 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXExpressionInClosureAccess().getGroup()); }
		(rule__XExpressionInClosure__Group__0)
		{ after(grammarAccess.getXExpressionInClosureAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXShortClosure
entryRuleXShortClosure
:
{ before(grammarAccess.getXShortClosureRule()); }
	 ruleXShortClosure
{ after(grammarAccess.getXShortClosureRule()); } 
	 EOF 
;

// Rule XShortClosure
ruleXShortClosure 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXShortClosureAccess().getGroup()); }
		(rule__XShortClosure__Group__0)
		{ after(grammarAccess.getXShortClosureAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXParenthesizedExpression
entryRuleXParenthesizedExpression
:
{ before(grammarAccess.getXParenthesizedExpressionRule()); }
	 ruleXParenthesizedExpression
{ after(grammarAccess.getXParenthesizedExpressionRule()); } 
	 EOF 
;

// Rule XParenthesizedExpression
ruleXParenthesizedExpression 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXParenthesizedExpressionAccess().getGroup()); }
		(rule__XParenthesizedExpression__Group__0)
		{ after(grammarAccess.getXParenthesizedExpressionAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXIfExpression
entryRuleXIfExpression
:
{ before(grammarAccess.getXIfExpressionRule()); }
	 ruleXIfExpression
{ after(grammarAccess.getXIfExpressionRule()); } 
	 EOF 
;

// Rule XIfExpression
ruleXIfExpression 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXIfExpressionAccess().getGroup()); }
		(rule__XIfExpression__Group__0)
		{ after(grammarAccess.getXIfExpressionAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXSwitchExpression
entryRuleXSwitchExpression
:
{ before(grammarAccess.getXSwitchExpressionRule()); }
	 ruleXSwitchExpression
{ after(grammarAccess.getXSwitchExpressionRule()); } 
	 EOF 
;

// Rule XSwitchExpression
ruleXSwitchExpression 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXSwitchExpressionAccess().getGroup()); }
		(rule__XSwitchExpression__Group__0)
		{ after(grammarAccess.getXSwitchExpressionAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXCasePart
entryRuleXCasePart
:
{ before(grammarAccess.getXCasePartRule()); }
	 ruleXCasePart
{ after(grammarAccess.getXCasePartRule()); } 
	 EOF 
;

// Rule XCasePart
ruleXCasePart 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXCasePartAccess().getGroup()); }
		(rule__XCasePart__Group__0)
		{ after(grammarAccess.getXCasePartAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXForLoopExpression
entryRuleXForLoopExpression
:
{ before(grammarAccess.getXForLoopExpressionRule()); }
	 ruleXForLoopExpression
{ after(grammarAccess.getXForLoopExpressionRule()); } 
	 EOF 
;

// Rule XForLoopExpression
ruleXForLoopExpression 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXForLoopExpressionAccess().getGroup()); }
		(rule__XForLoopExpression__Group__0)
		{ after(grammarAccess.getXForLoopExpressionAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXBasicForLoopExpression
entryRuleXBasicForLoopExpression
:
{ before(grammarAccess.getXBasicForLoopExpressionRule()); }
	 ruleXBasicForLoopExpression
{ after(grammarAccess.getXBasicForLoopExpressionRule()); } 
	 EOF 
;

// Rule XBasicForLoopExpression
ruleXBasicForLoopExpression 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXBasicForLoopExpressionAccess().getGroup()); }
		(rule__XBasicForLoopExpression__Group__0)
		{ after(grammarAccess.getXBasicForLoopExpressionAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXWhileExpression
entryRuleXWhileExpression
:
{ before(grammarAccess.getXWhileExpressionRule()); }
	 ruleXWhileExpression
{ after(grammarAccess.getXWhileExpressionRule()); } 
	 EOF 
;

// Rule XWhileExpression
ruleXWhileExpression 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXWhileExpressionAccess().getGroup()); }
		(rule__XWhileExpression__Group__0)
		{ after(grammarAccess.getXWhileExpressionAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXDoWhileExpression
entryRuleXDoWhileExpression
:
{ before(grammarAccess.getXDoWhileExpressionRule()); }
	 ruleXDoWhileExpression
{ after(grammarAccess.getXDoWhileExpressionRule()); } 
	 EOF 
;

// Rule XDoWhileExpression
ruleXDoWhileExpression 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXDoWhileExpressionAccess().getGroup()); }
		(rule__XDoWhileExpression__Group__0)
		{ after(grammarAccess.getXDoWhileExpressionAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXBlockExpression
entryRuleXBlockExpression
:
{ before(grammarAccess.getXBlockExpressionRule()); }
	 ruleXBlockExpression
{ after(grammarAccess.getXBlockExpressionRule()); } 
	 EOF 
;

// Rule XBlockExpression
ruleXBlockExpression 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXBlockExpressionAccess().getGroup()); }
		(rule__XBlockExpression__Group__0)
		{ after(grammarAccess.getXBlockExpressionAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXExpressionOrVarDeclaration
entryRuleXExpressionOrVarDeclaration
:
{ before(grammarAccess.getXExpressionOrVarDeclarationRule()); }
	 ruleXExpressionOrVarDeclaration
{ after(grammarAccess.getXExpressionOrVarDeclarationRule()); } 
	 EOF 
;

// Rule XExpressionOrVarDeclaration
ruleXExpressionOrVarDeclaration 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXExpressionOrVarDeclarationAccess().getAlternatives()); }
		(rule__XExpressionOrVarDeclaration__Alternatives)
		{ after(grammarAccess.getXExpressionOrVarDeclarationAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXVariableDeclaration
entryRuleXVariableDeclaration
:
{ before(grammarAccess.getXVariableDeclarationRule()); }
	 ruleXVariableDeclaration
{ after(grammarAccess.getXVariableDeclarationRule()); } 
	 EOF 
;

// Rule XVariableDeclaration
ruleXVariableDeclaration 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXVariableDeclarationAccess().getGroup()); }
		(rule__XVariableDeclaration__Group__0)
		{ after(grammarAccess.getXVariableDeclarationAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleJvmFormalParameter
entryRuleJvmFormalParameter
:
{ before(grammarAccess.getJvmFormalParameterRule()); }
	 ruleJvmFormalParameter
{ after(grammarAccess.getJvmFormalParameterRule()); } 
	 EOF 
;

// Rule JvmFormalParameter
ruleJvmFormalParameter 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getJvmFormalParameterAccess().getGroup()); }
		(rule__JvmFormalParameter__Group__0)
		{ after(grammarAccess.getJvmFormalParameterAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleFullJvmFormalParameter
entryRuleFullJvmFormalParameter
:
{ before(grammarAccess.getFullJvmFormalParameterRule()); }
	 ruleFullJvmFormalParameter
{ after(grammarAccess.getFullJvmFormalParameterRule()); } 
	 EOF 
;

// Rule FullJvmFormalParameter
ruleFullJvmFormalParameter 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getFullJvmFormalParameterAccess().getGroup()); }
		(rule__FullJvmFormalParameter__Group__0)
		{ after(grammarAccess.getFullJvmFormalParameterAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXFeatureCall
entryRuleXFeatureCall
:
{ before(grammarAccess.getXFeatureCallRule()); }
	 ruleXFeatureCall
{ after(grammarAccess.getXFeatureCallRule()); } 
	 EOF 
;

// Rule XFeatureCall
ruleXFeatureCall 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXFeatureCallAccess().getGroup()); }
		(rule__XFeatureCall__Group__0)
		{ after(grammarAccess.getXFeatureCallAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleFeatureCallID
entryRuleFeatureCallID
:
{ before(grammarAccess.getFeatureCallIDRule()); }
	 ruleFeatureCallID
{ after(grammarAccess.getFeatureCallIDRule()); } 
	 EOF 
;

// Rule FeatureCallID
ruleFeatureCallID 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getFeatureCallIDAccess().getAlternatives()); }
		(rule__FeatureCallID__Alternatives)
		{ after(grammarAccess.getFeatureCallIDAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleIdOrSuper
entryRuleIdOrSuper
:
{ before(grammarAccess.getIdOrSuperRule()); }
	 ruleIdOrSuper
{ after(grammarAccess.getIdOrSuperRule()); } 
	 EOF 
;

// Rule IdOrSuper
ruleIdOrSuper 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getIdOrSuperAccess().getAlternatives()); }
		(rule__IdOrSuper__Alternatives)
		{ after(grammarAccess.getIdOrSuperAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXConstructorCall
entryRuleXConstructorCall
:
{ before(grammarAccess.getXConstructorCallRule()); }
	 ruleXConstructorCall
{ after(grammarAccess.getXConstructorCallRule()); } 
	 EOF 
;

// Rule XConstructorCall
ruleXConstructorCall 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXConstructorCallAccess().getGroup()); }
		(rule__XConstructorCall__Group__0)
		{ after(grammarAccess.getXConstructorCallAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXBooleanLiteral
entryRuleXBooleanLiteral
:
{ before(grammarAccess.getXBooleanLiteralRule()); }
	 ruleXBooleanLiteral
{ after(grammarAccess.getXBooleanLiteralRule()); } 
	 EOF 
;

// Rule XBooleanLiteral
ruleXBooleanLiteral 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXBooleanLiteralAccess().getGroup()); }
		(rule__XBooleanLiteral__Group__0)
		{ after(grammarAccess.getXBooleanLiteralAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXNullLiteral
entryRuleXNullLiteral
:
{ before(grammarAccess.getXNullLiteralRule()); }
	 ruleXNullLiteral
{ after(grammarAccess.getXNullLiteralRule()); } 
	 EOF 
;

// Rule XNullLiteral
ruleXNullLiteral 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXNullLiteralAccess().getGroup()); }
		(rule__XNullLiteral__Group__0)
		{ after(grammarAccess.getXNullLiteralAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXNumberLiteral
entryRuleXNumberLiteral
:
{ before(grammarAccess.getXNumberLiteralRule()); }
	 ruleXNumberLiteral
{ after(grammarAccess.getXNumberLiteralRule()); } 
	 EOF 
;

// Rule XNumberLiteral
ruleXNumberLiteral 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXNumberLiteralAccess().getGroup()); }
		(rule__XNumberLiteral__Group__0)
		{ after(grammarAccess.getXNumberLiteralAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXStringLiteral
entryRuleXStringLiteral
:
{ before(grammarAccess.getXStringLiteralRule()); }
	 ruleXStringLiteral
{ after(grammarAccess.getXStringLiteralRule()); } 
	 EOF 
;

// Rule XStringLiteral
ruleXStringLiteral 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXStringLiteralAccess().getGroup()); }
		(rule__XStringLiteral__Group__0)
		{ after(grammarAccess.getXStringLiteralAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXTypeLiteral
entryRuleXTypeLiteral
:
{ before(grammarAccess.getXTypeLiteralRule()); }
	 ruleXTypeLiteral
{ after(grammarAccess.getXTypeLiteralRule()); } 
	 EOF 
;

// Rule XTypeLiteral
ruleXTypeLiteral 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXTypeLiteralAccess().getGroup()); }
		(rule__XTypeLiteral__Group__0)
		{ after(grammarAccess.getXTypeLiteralAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXThrowExpression
entryRuleXThrowExpression
:
{ before(grammarAccess.getXThrowExpressionRule()); }
	 ruleXThrowExpression
{ after(grammarAccess.getXThrowExpressionRule()); } 
	 EOF 
;

// Rule XThrowExpression
ruleXThrowExpression 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXThrowExpressionAccess().getGroup()); }
		(rule__XThrowExpression__Group__0)
		{ after(grammarAccess.getXThrowExpressionAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXReturnExpression
entryRuleXReturnExpression
:
{ before(grammarAccess.getXReturnExpressionRule()); }
	 ruleXReturnExpression
{ after(grammarAccess.getXReturnExpressionRule()); } 
	 EOF 
;

// Rule XReturnExpression
ruleXReturnExpression 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXReturnExpressionAccess().getGroup()); }
		(rule__XReturnExpression__Group__0)
		{ after(grammarAccess.getXReturnExpressionAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXTryCatchFinallyExpression
entryRuleXTryCatchFinallyExpression
:
{ before(grammarAccess.getXTryCatchFinallyExpressionRule()); }
	 ruleXTryCatchFinallyExpression
{ after(grammarAccess.getXTryCatchFinallyExpressionRule()); } 
	 EOF 
;

// Rule XTryCatchFinallyExpression
ruleXTryCatchFinallyExpression 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXTryCatchFinallyExpressionAccess().getGroup()); }
		(rule__XTryCatchFinallyExpression__Group__0)
		{ after(grammarAccess.getXTryCatchFinallyExpressionAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXSynchronizedExpression
entryRuleXSynchronizedExpression
:
{ before(grammarAccess.getXSynchronizedExpressionRule()); }
	 ruleXSynchronizedExpression
{ after(grammarAccess.getXSynchronizedExpressionRule()); } 
	 EOF 
;

// Rule XSynchronizedExpression
ruleXSynchronizedExpression 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXSynchronizedExpressionAccess().getGroup()); }
		(rule__XSynchronizedExpression__Group__0)
		{ after(grammarAccess.getXSynchronizedExpressionAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXCatchClause
entryRuleXCatchClause
:
{ before(grammarAccess.getXCatchClauseRule()); }
	 ruleXCatchClause
{ after(grammarAccess.getXCatchClauseRule()); } 
	 EOF 
;

// Rule XCatchClause
ruleXCatchClause 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXCatchClauseAccess().getGroup()); }
		(rule__XCatchClause__Group__0)
		{ after(grammarAccess.getXCatchClauseAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleQualifiedName
entryRuleQualifiedName
:
{ before(grammarAccess.getQualifiedNameRule()); }
	 ruleQualifiedName
{ after(grammarAccess.getQualifiedNameRule()); } 
	 EOF 
;

// Rule QualifiedName
ruleQualifiedName 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getQualifiedNameAccess().getGroup()); }
		(rule__QualifiedName__Group__0)
		{ after(grammarAccess.getQualifiedNameAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleNumber
entryRuleNumber
@init { 
	HiddenTokens myHiddenTokenState = ((XtextTokenStream)input).setHiddenTokens();
}
:
{ before(grammarAccess.getNumberRule()); }
	 ruleNumber
{ after(grammarAccess.getNumberRule()); } 
	 EOF 
;
finally {
	myHiddenTokenState.restore();
}

// Rule Number
ruleNumber 
	@init {
		HiddenTokens myHiddenTokenState = ((XtextTokenStream)input).setHiddenTokens();
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getNumberAccess().getAlternatives()); }
		(rule__Number__Alternatives)
		{ after(grammarAccess.getNumberAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
	myHiddenTokenState.restore();
}

// Entry rule entryRuleJvmTypeReference
entryRuleJvmTypeReference
:
{ before(grammarAccess.getJvmTypeReferenceRule()); }
	 ruleJvmTypeReference
{ after(grammarAccess.getJvmTypeReferenceRule()); } 
	 EOF 
;

// Rule JvmTypeReference
ruleJvmTypeReference 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getJvmTypeReferenceAccess().getAlternatives()); }
		(rule__JvmTypeReference__Alternatives)
		{ after(grammarAccess.getJvmTypeReferenceAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleArrayBrackets
entryRuleArrayBrackets
:
{ before(grammarAccess.getArrayBracketsRule()); }
	 ruleArrayBrackets
{ after(grammarAccess.getArrayBracketsRule()); } 
	 EOF 
;

// Rule ArrayBrackets
ruleArrayBrackets 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getArrayBracketsAccess().getGroup()); }
		(rule__ArrayBrackets__Group__0)
		{ after(grammarAccess.getArrayBracketsAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXFunctionTypeRef
entryRuleXFunctionTypeRef
:
{ before(grammarAccess.getXFunctionTypeRefRule()); }
	 ruleXFunctionTypeRef
{ after(grammarAccess.getXFunctionTypeRefRule()); } 
	 EOF 
;

// Rule XFunctionTypeRef
ruleXFunctionTypeRef 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getXFunctionTypeRefAccess().getGroup()); }
		(rule__XFunctionTypeRef__Group__0)
		{ after(grammarAccess.getXFunctionTypeRefAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleJvmParameterizedTypeReference
entryRuleJvmParameterizedTypeReference
:
{ before(grammarAccess.getJvmParameterizedTypeReferenceRule()); }
	 ruleJvmParameterizedTypeReference
{ after(grammarAccess.getJvmParameterizedTypeReferenceRule()); } 
	 EOF 
;

// Rule JvmParameterizedTypeReference
ruleJvmParameterizedTypeReference 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGroup()); }
		(rule__JvmParameterizedTypeReference__Group__0)
		{ after(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleJvmArgumentTypeReference
entryRuleJvmArgumentTypeReference
:
{ before(grammarAccess.getJvmArgumentTypeReferenceRule()); }
	 ruleJvmArgumentTypeReference
{ after(grammarAccess.getJvmArgumentTypeReferenceRule()); } 
	 EOF 
;

// Rule JvmArgumentTypeReference
ruleJvmArgumentTypeReference 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getJvmArgumentTypeReferenceAccess().getAlternatives()); }
		(rule__JvmArgumentTypeReference__Alternatives)
		{ after(grammarAccess.getJvmArgumentTypeReferenceAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleJvmWildcardTypeReference
entryRuleJvmWildcardTypeReference
:
{ before(grammarAccess.getJvmWildcardTypeReferenceRule()); }
	 ruleJvmWildcardTypeReference
{ after(grammarAccess.getJvmWildcardTypeReferenceRule()); } 
	 EOF 
;

// Rule JvmWildcardTypeReference
ruleJvmWildcardTypeReference 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getJvmWildcardTypeReferenceAccess().getGroup()); }
		(rule__JvmWildcardTypeReference__Group__0)
		{ after(grammarAccess.getJvmWildcardTypeReferenceAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleJvmUpperBound
entryRuleJvmUpperBound
:
{ before(grammarAccess.getJvmUpperBoundRule()); }
	 ruleJvmUpperBound
{ after(grammarAccess.getJvmUpperBoundRule()); } 
	 EOF 
;

// Rule JvmUpperBound
ruleJvmUpperBound 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getJvmUpperBoundAccess().getGroup()); }
		(rule__JvmUpperBound__Group__0)
		{ after(grammarAccess.getJvmUpperBoundAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleJvmUpperBoundAnded
entryRuleJvmUpperBoundAnded
:
{ before(grammarAccess.getJvmUpperBoundAndedRule()); }
	 ruleJvmUpperBoundAnded
{ after(grammarAccess.getJvmUpperBoundAndedRule()); } 
	 EOF 
;

// Rule JvmUpperBoundAnded
ruleJvmUpperBoundAnded 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getJvmUpperBoundAndedAccess().getGroup()); }
		(rule__JvmUpperBoundAnded__Group__0)
		{ after(grammarAccess.getJvmUpperBoundAndedAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleJvmLowerBound
entryRuleJvmLowerBound
:
{ before(grammarAccess.getJvmLowerBoundRule()); }
	 ruleJvmLowerBound
{ after(grammarAccess.getJvmLowerBoundRule()); } 
	 EOF 
;

// Rule JvmLowerBound
ruleJvmLowerBound 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getJvmLowerBoundAccess().getGroup()); }
		(rule__JvmLowerBound__Group__0)
		{ after(grammarAccess.getJvmLowerBoundAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleJvmLowerBoundAnded
entryRuleJvmLowerBoundAnded
:
{ before(grammarAccess.getJvmLowerBoundAndedRule()); }
	 ruleJvmLowerBoundAnded
{ after(grammarAccess.getJvmLowerBoundAndedRule()); } 
	 EOF 
;

// Rule JvmLowerBoundAnded
ruleJvmLowerBoundAnded 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getJvmLowerBoundAndedAccess().getGroup()); }
		(rule__JvmLowerBoundAnded__Group__0)
		{ after(grammarAccess.getJvmLowerBoundAndedAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleQualifiedNameWithWildcard
entryRuleQualifiedNameWithWildcard
:
{ before(grammarAccess.getQualifiedNameWithWildcardRule()); }
	 ruleQualifiedNameWithWildcard
{ after(grammarAccess.getQualifiedNameWithWildcardRule()); } 
	 EOF 
;

// Rule QualifiedNameWithWildcard
ruleQualifiedNameWithWildcard 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getQualifiedNameWithWildcardAccess().getGroup()); }
		(rule__QualifiedNameWithWildcard__Group__0)
		{ after(grammarAccess.getQualifiedNameWithWildcardAccess().getGroup()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleValidID
entryRuleValidID
:
{ before(grammarAccess.getValidIDRule()); }
	 ruleValidID
{ after(grammarAccess.getValidIDRule()); } 
	 EOF 
;

// Rule ValidID
ruleValidID 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		{ before(grammarAccess.getValidIDAccess().getIDTerminalRuleCall()); }
		RULE_ID
		{ after(grammarAccess.getValidIDAccess().getIDTerminalRuleCall()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleXImportSection
entryRuleXImportSection
:
{ before(grammarAccess.getXImportSectionRule()); }
	 ruleXImportSection
{ after(grammarAccess.getXImportSectionRule()); } 
	 EOF 
;

// Rule XImportSection
ruleXImportSection 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		(
			{ before(grammarAccess.getXImportSectionAccess().getImportDeclarationsAssignment()); }
			(rule__XImportSection__ImportDeclarationsAssignment)
			{ after(grammarAccess.getXImportSectionAccess().getImportDeclarationsAssignment()); }
		)
		(
			{ before(grammarAccess.getXImportSectionAccess().getImportDeclarationsAssignment()); }
			(rule__XImportSection__ImportDeclarationsAssignment)*
			{ after(grammarAccess.getXImportSectionAccess().getImportDeclarationsAssignment()); }
		)
	)
;
finally {
	restoreStackSize(stackSize);
}

// Entry rule entryRuleQualifiedNameInStaticImport
entryRuleQualifiedNameInStaticImport
:
{ before(grammarAccess.getQualifiedNameInStaticImportRule()); }
	 ruleQualifiedNameInStaticImport
{ after(grammarAccess.getQualifiedNameInStaticImportRule()); } 
	 EOF 
;

// Rule QualifiedNameInStaticImport
ruleQualifiedNameInStaticImport 
	@init {
		int stackSize = keepStackSize();
	}
	:
	(
		(
			{ before(grammarAccess.getQualifiedNameInStaticImportAccess().getGroup()); }
			(rule__QualifiedNameInStaticImport__Group__0)
			{ after(grammarAccess.getQualifiedNameInStaticImportAccess().getGroup()); }
		)
		(
			{ before(grammarAccess.getQualifiedNameInStaticImportAccess().getGroup()); }
			(rule__QualifiedNameInStaticImport__Group__0)*
			{ after(grammarAccess.getQualifiedNameInStaticImportAccess().getGroup()); }
		)
	)
;
finally {
	restoreStackSize(stackSize);
}

// Rule DiscriminatorType
ruleDiscriminatorType
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDiscriminatorTypeAccess().getAlternatives()); }
		(rule__DiscriminatorType__Alternatives)
		{ after(grammarAccess.getDiscriminatorTypeAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Rule LHistorizedDateType
ruleLHistorizedDateType
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getLHistorizedDateTypeAccess().getAlternatives()); }
		(rule__LHistorizedDateType__Alternatives)
		{ after(grammarAccess.getLHistorizedDateTypeAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Rule ConstraintSeverity
ruleConstraintSeverity
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getConstraintSeverityAccess().getAlternatives()); }
		(rule__ConstraintSeverity__Alternatives)
		{ after(grammarAccess.getConstraintSeverityAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Rule DateType
ruleDateType
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDateTypeAccess().getAlternatives()); }
		(rule__DateType__Alternatives)
		{ after(grammarAccess.getDateTypeAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Rule LVisibility
ruleLVisibility
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getLVisibilityAccess().getAlternatives()); }
		(rule__LVisibility__Alternatives)
		{ after(grammarAccess.getLVisibilityAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Rule LComparatorType
ruleLComparatorType
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getLComparatorTypeAccess().getAlternatives()); }
		(rule__LComparatorType__Alternatives)
		{ after(grammarAccess.getLComparatorTypeAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Rule LowerBound
ruleLowerBound
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getLowerBoundAccess().getAlternatives()); }
		(rule__LowerBound__Alternatives)
		{ after(grammarAccess.getLowerBoundAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

// Rule UpperBound
ruleUpperBound
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getUpperBoundAccess().getAlternatives()); }
		(rule__UpperBound__Alternatives)
		{ after(grammarAccess.getUpperBoundAccess().getAlternatives()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Alternatives_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getClassAccess().getGroup_2_0()); }
		(rule__Class__Group_2_0__0)
		{ after(grammarAccess.getClassAccess().getGroup_2_0()); }
	)
	|
	(
		{ before(grammarAccess.getClassAccess().getGroup_2_1()); }
		(rule__Class__Group_2_1__0)
		{ after(grammarAccess.getClassAccess().getGroup_2_1()); }
	)
	|
	(
		{ before(grammarAccess.getClassAccess().getGroup_2_2()); }
		(rule__Class__Group_2_2__0)
		{ after(grammarAccess.getClassAccess().getGroup_2_2()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Alternatives_2_0_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getClassAccess().getHistorizedAssignment_2_0_1_1_0()); }
		(rule__Class__HistorizedAssignment_2_0_1_1_0)
		{ after(grammarAccess.getClassAccess().getHistorizedAssignment_2_0_1_1_0()); }
	)
	|
	(
		{ before(grammarAccess.getClassAccess().getGroup_2_0_1_1_1()); }
		(rule__Class__Group_2_0_1_1_1__0)
		{ after(grammarAccess.getClassAccess().getGroup_2_0_1_1_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Alternatives_2_0_10
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getClassAccess().getIndexesAssignment_2_0_10_0()); }
		(rule__Class__IndexesAssignment_2_0_10_0)
		{ after(grammarAccess.getClassAccess().getIndexesAssignment_2_0_10_0()); }
	)
	|
	(
		{ before(grammarAccess.getClassAccess().getSuperIndexAssignment_2_0_10_1()); }
		(rule__Class__SuperIndexAssignment_2_0_10_1)
		{ after(grammarAccess.getClassAccess().getSuperIndexAssignment_2_0_10_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Alternatives_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getGroup_2_0()); }
		(rule__EntityFeature__Group_2_0__0)
		{ after(grammarAccess.getEntityFeatureAccess().getGroup_2_0()); }
	)
	|
	(
		{ before(grammarAccess.getEntityFeatureAccess().getGroup_2_1()); }
		(rule__EntityFeature__Group_2_1__0)
		{ after(grammarAccess.getEntityFeatureAccess().getGroup_2_1()); }
	)
	|
	(
		{ before(grammarAccess.getEntityFeatureAccess().getGroup_2_2()); }
		(rule__EntityFeature__Group_2_2__0)
		{ after(grammarAccess.getEntityFeatureAccess().getGroup_2_2()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Alternatives_2_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getGroup_2_1_1_0()); }
		(rule__EntityFeature__Group_2_1_1_0__0)
		{ after(grammarAccess.getEntityFeatureAccess().getGroup_2_1_1_0()); }
	)
	|
	(
		{ before(grammarAccess.getEntityFeatureAccess().getGroup_2_1_1_1()); }
		(rule__EntityFeature__Group_2_1_1_1__0)
		{ after(grammarAccess.getEntityFeatureAccess().getGroup_2_1_1_1()); }
	)
	|
	(
		{ before(grammarAccess.getEntityFeatureAccess().getGroup_2_1_1_2()); }
		(rule__EntityFeature__Group_2_1_1_2__0)
		{ after(grammarAccess.getEntityFeatureAccess().getGroup_2_1_1_2()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Alternatives_2_1_1_2_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getVarKeyword_2_1_1_2_0_0()); }
		'var'
		{ after(grammarAccess.getEntityFeatureAccess().getVarKeyword_2_1_1_2_0_0()); }
	)
	|
	(
		{ before(grammarAccess.getEntityFeatureAccess().getIdAssignment_2_1_1_2_0_1()); }
		(rule__EntityFeature__IdAssignment_2_1_1_2_0_1)
		{ after(grammarAccess.getEntityFeatureAccess().getIdAssignment_2_1_1_2_0_1()); }
	)
	|
	(
		{ before(grammarAccess.getEntityFeatureAccess().getUuidAssignment_2_1_1_2_0_2()); }
		(rule__EntityFeature__UuidAssignment_2_1_1_2_0_2)
		{ after(grammarAccess.getEntityFeatureAccess().getUuidAssignment_2_1_1_2_0_2()); }
	)
	|
	(
		{ before(grammarAccess.getEntityFeatureAccess().getVersionAssignment_2_1_1_2_0_3()); }
		(rule__EntityFeature__VersionAssignment_2_1_1_2_0_3)
		{ after(grammarAccess.getEntityFeatureAccess().getVersionAssignment_2_1_1_2_0_3()); }
	)
	|
	(
		{ before(grammarAccess.getEntityFeatureAccess().getDomainDescriptionAssignment_2_1_1_2_0_4()); }
		(rule__EntityFeature__DomainDescriptionAssignment_2_1_1_2_0_4)
		{ after(grammarAccess.getEntityFeatureAccess().getDomainDescriptionAssignment_2_1_1_2_0_4()); }
	)
	|
	(
		{ before(grammarAccess.getEntityFeatureAccess().getDomainKeyAssignment_2_1_1_2_0_5()); }
		(rule__EntityFeature__DomainKeyAssignment_2_1_1_2_0_5)
		{ after(grammarAccess.getEntityFeatureAccess().getDomainKeyAssignment_2_1_1_2_0_5()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Alternatives_2_1_1_2_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getFilteringAssignment_2_1_1_2_2_0()); }
		(rule__EntityFeature__FilteringAssignment_2_1_1_2_2_0)
		{ after(grammarAccess.getEntityFeatureAccess().getFilteringAssignment_2_1_1_2_2_0()); }
	)
	|
	(
		{ before(grammarAccess.getEntityFeatureAccess().getRangeFilteringAssignment_2_1_1_2_2_1()); }
		(rule__EntityFeature__RangeFilteringAssignment_2_1_1_2_2_1)
		{ after(grammarAccess.getEntityFeatureAccess().getRangeFilteringAssignment_2_1_1_2_2_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Alternatives_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBeanFeatureAccess().getGroup_2_0()); }
		(rule__BeanFeature__Group_2_0__0)
		{ after(grammarAccess.getBeanFeatureAccess().getGroup_2_0()); }
	)
	|
	(
		{ before(grammarAccess.getBeanFeatureAccess().getGroup_2_1()); }
		(rule__BeanFeature__Group_2_1__0)
		{ after(grammarAccess.getBeanFeatureAccess().getGroup_2_1()); }
	)
	|
	(
		{ before(grammarAccess.getBeanFeatureAccess().getGroup_2_2()); }
		(rule__BeanFeature__Group_2_2__0)
		{ after(grammarAccess.getBeanFeatureAccess().getGroup_2_2()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Alternatives_2_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBeanFeatureAccess().getGroup_2_1_1_0()); }
		(rule__BeanFeature__Group_2_1_1_0__0)
		{ after(grammarAccess.getBeanFeatureAccess().getGroup_2_1_1_0()); }
	)
	|
	(
		{ before(grammarAccess.getBeanFeatureAccess().getGroup_2_1_1_1()); }
		(rule__BeanFeature__Group_2_1_1_1__0)
		{ after(grammarAccess.getBeanFeatureAccess().getGroup_2_1_1_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Alternatives_2_1_1_1_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBeanFeatureAccess().getVarKeyword_2_1_1_1_0_0()); }
		'var'
		{ after(grammarAccess.getBeanFeatureAccess().getVarKeyword_2_1_1_1_0_0()); }
	)
	|
	(
		{ before(grammarAccess.getBeanFeatureAccess().getIdAssignment_2_1_1_1_0_1()); }
		(rule__BeanFeature__IdAssignment_2_1_1_1_0_1)
		{ after(grammarAccess.getBeanFeatureAccess().getIdAssignment_2_1_1_1_0_1()); }
	)
	|
	(
		{ before(grammarAccess.getBeanFeatureAccess().getVersionAssignment_2_1_1_1_0_2()); }
		(rule__BeanFeature__VersionAssignment_2_1_1_1_0_2)
		{ after(grammarAccess.getBeanFeatureAccess().getVersionAssignment_2_1_1_1_0_2()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Alternatives_2_1_1_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBeanFeatureAccess().getFilteringAssignment_2_1_1_1_1_0()); }
		(rule__BeanFeature__FilteringAssignment_2_1_1_1_1_0)
		{ after(grammarAccess.getBeanFeatureAccess().getFilteringAssignment_2_1_1_1_1_0()); }
	)
	|
	(
		{ before(grammarAccess.getBeanFeatureAccess().getRangeFilteringAssignment_2_1_1_1_1_1()); }
		(rule__BeanFeature__RangeFilteringAssignment_2_1_1_1_1_1)
		{ after(grammarAccess.getBeanFeatureAccess().getRangeFilteringAssignment_2_1_1_1_1_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityInheritanceStrategy__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityInheritanceStrategyAccess().getTablePerClassStrategyParserRuleCall_0()); }
		ruleTablePerClassStrategy
		{ after(grammarAccess.getEntityInheritanceStrategyAccess().getTablePerClassStrategyParserRuleCall_0()); }
	)
	|
	(
		{ before(grammarAccess.getEntityInheritanceStrategyAccess().getTablePerSubclassStrategyParserRuleCall_1()); }
		ruleTablePerSubclassStrategy
		{ after(grammarAccess.getEntityInheritanceStrategyAccess().getTablePerSubclassStrategyParserRuleCall_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__Type__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getTypeAccess().getScalarTypeParserRuleCall_0()); }
		ruleScalarType
		{ after(grammarAccess.getTypeAccess().getScalarTypeParserRuleCall_0()); }
	)
	|
	(
		{ before(grammarAccess.getTypeAccess().getClassParserRuleCall_1()); }
		ruleClass
		{ after(grammarAccess.getTypeAccess().getClassParserRuleCall_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Alternatives_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDataTypeAccess().getGroup_2_0()); }
		(rule__DataType__Group_2_0__0)
		{ after(grammarAccess.getDataTypeAccess().getGroup_2_0()); }
	)
	|
	(
		{ before(grammarAccess.getDataTypeAccess().getGroup_2_1()); }
		(rule__DataType__Group_2_1__0)
		{ after(grammarAccess.getDataTypeAccess().getGroup_2_1()); }
	)
	|
	(
		{ before(grammarAccess.getDataTypeAccess().getGroup_2_2()); }
		(rule__DataType__Group_2_2__0)
		{ after(grammarAccess.getDataTypeAccess().getGroup_2_2()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__AllConstraints__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getAllConstraintsAccess().getDtCAssertFalseParserRuleCall_0()); }
		ruleDtCAssertFalse
		{ after(grammarAccess.getAllConstraintsAccess().getDtCAssertFalseParserRuleCall_0()); }
	)
	|
	(
		{ before(grammarAccess.getAllConstraintsAccess().getDtCAssertTrueParserRuleCall_1()); }
		ruleDtCAssertTrue
		{ after(grammarAccess.getAllConstraintsAccess().getDtCAssertTrueParserRuleCall_1()); }
	)
	|
	(
		{ before(grammarAccess.getAllConstraintsAccess().getDtCDecimalMaxParserRuleCall_2()); }
		ruleDtCDecimalMax
		{ after(grammarAccess.getAllConstraintsAccess().getDtCDecimalMaxParserRuleCall_2()); }
	)
	|
	(
		{ before(grammarAccess.getAllConstraintsAccess().getDtCDecimalMinParserRuleCall_3()); }
		ruleDtCDecimalMin
		{ after(grammarAccess.getAllConstraintsAccess().getDtCDecimalMinParserRuleCall_3()); }
	)
	|
	(
		{ before(grammarAccess.getAllConstraintsAccess().getDtCDigitsParserRuleCall_4()); }
		ruleDtCDigits
		{ after(grammarAccess.getAllConstraintsAccess().getDtCDigitsParserRuleCall_4()); }
	)
	|
	(
		{ before(grammarAccess.getAllConstraintsAccess().getDtCNumericMaxParserRuleCall_5()); }
		ruleDtCNumericMax
		{ after(grammarAccess.getAllConstraintsAccess().getDtCNumericMaxParserRuleCall_5()); }
	)
	|
	(
		{ before(grammarAccess.getAllConstraintsAccess().getDtCNumericMinParserRuleCall_6()); }
		ruleDtCNumericMin
		{ after(grammarAccess.getAllConstraintsAccess().getDtCNumericMinParserRuleCall_6()); }
	)
	|
	(
		{ before(grammarAccess.getAllConstraintsAccess().getDtCNotNullParserRuleCall_7()); }
		ruleDtCNotNull
		{ after(grammarAccess.getAllConstraintsAccess().getDtCNotNullParserRuleCall_7()); }
	)
	|
	(
		{ before(grammarAccess.getAllConstraintsAccess().getDtCNullParserRuleCall_8()); }
		ruleDtCNull
		{ after(grammarAccess.getAllConstraintsAccess().getDtCNullParserRuleCall_8()); }
	)
	|
	(
		{ before(grammarAccess.getAllConstraintsAccess().getDtCRegExParserRuleCall_9()); }
		ruleDtCRegEx
		{ after(grammarAccess.getAllConstraintsAccess().getDtCRegExParserRuleCall_9()); }
	)
	|
	(
		{ before(grammarAccess.getAllConstraintsAccess().getDtCSizeParserRuleCall_10()); }
		ruleDtCSize
		{ after(grammarAccess.getAllConstraintsAccess().getDtCSizeParserRuleCall_10()); }
	)
	|
	(
		{ before(grammarAccess.getAllConstraintsAccess().getDtCFutureParserRuleCall_11()); }
		ruleDtCFuture
		{ after(grammarAccess.getAllConstraintsAccess().getDtCFutureParserRuleCall_11()); }
	)
	|
	(
		{ before(grammarAccess.getAllConstraintsAccess().getDtCPastParserRuleCall_12()); }
		ruleDtCPast
		{ after(grammarAccess.getAllConstraintsAccess().getDtCPastParserRuleCall_12()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataTypeConstraint__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDataTypeConstraintAccess().getDtCAssertFalseParserRuleCall_0()); }
		ruleDtCAssertFalse
		{ after(grammarAccess.getDataTypeConstraintAccess().getDtCAssertFalseParserRuleCall_0()); }
	)
	|
	(
		{ before(grammarAccess.getDataTypeConstraintAccess().getDtCAssertTrueParserRuleCall_1()); }
		ruleDtCAssertTrue
		{ after(grammarAccess.getDataTypeConstraintAccess().getDtCAssertTrueParserRuleCall_1()); }
	)
	|
	(
		{ before(grammarAccess.getDataTypeConstraintAccess().getDtCDecimalMaxParserRuleCall_2()); }
		ruleDtCDecimalMax
		{ after(grammarAccess.getDataTypeConstraintAccess().getDtCDecimalMaxParserRuleCall_2()); }
	)
	|
	(
		{ before(grammarAccess.getDataTypeConstraintAccess().getDtCDecimalMinParserRuleCall_3()); }
		ruleDtCDecimalMin
		{ after(grammarAccess.getDataTypeConstraintAccess().getDtCDecimalMinParserRuleCall_3()); }
	)
	|
	(
		{ before(grammarAccess.getDataTypeConstraintAccess().getDtCDigitsParserRuleCall_4()); }
		ruleDtCDigits
		{ after(grammarAccess.getDataTypeConstraintAccess().getDtCDigitsParserRuleCall_4()); }
	)
	|
	(
		{ before(grammarAccess.getDataTypeConstraintAccess().getDtCNumericMaxParserRuleCall_5()); }
		ruleDtCNumericMax
		{ after(grammarAccess.getDataTypeConstraintAccess().getDtCNumericMaxParserRuleCall_5()); }
	)
	|
	(
		{ before(grammarAccess.getDataTypeConstraintAccess().getDtCNumericMinParserRuleCall_6()); }
		ruleDtCNumericMin
		{ after(grammarAccess.getDataTypeConstraintAccess().getDtCNumericMinParserRuleCall_6()); }
	)
	|
	(
		{ before(grammarAccess.getDataTypeConstraintAccess().getDtCNotNullParserRuleCall_7()); }
		ruleDtCNotNull
		{ after(grammarAccess.getDataTypeConstraintAccess().getDtCNotNullParserRuleCall_7()); }
	)
	|
	(
		{ before(grammarAccess.getDataTypeConstraintAccess().getDtCNullParserRuleCall_8()); }
		ruleDtCNull
		{ after(grammarAccess.getDataTypeConstraintAccess().getDtCNullParserRuleCall_8()); }
	)
	|
	(
		{ before(grammarAccess.getDataTypeConstraintAccess().getDtCRegExParserRuleCall_9()); }
		ruleDtCRegEx
		{ after(grammarAccess.getDataTypeConstraintAccess().getDtCRegExParserRuleCall_9()); }
	)
	|
	(
		{ before(grammarAccess.getDataTypeConstraintAccess().getDtCSizeParserRuleCall_10()); }
		ruleDtCSize
		{ after(grammarAccess.getDataTypeConstraintAccess().getDtCSizeParserRuleCall_10()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DateConstraint__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDateConstraintAccess().getDtCFutureParserRuleCall_0()); }
		ruleDtCFuture
		{ after(grammarAccess.getDateConstraintAccess().getDtCFutureParserRuleCall_0()); }
	)
	|
	(
		{ before(grammarAccess.getDateConstraintAccess().getDtCPastParserRuleCall_1()); }
		ruleDtCPast
		{ after(grammarAccess.getDateConstraintAccess().getDtCPastParserRuleCall_1()); }
	)
	|
	(
		{ before(grammarAccess.getDateConstraintAccess().getDtCNotNullParserRuleCall_2()); }
		ruleDtCNotNull
		{ after(grammarAccess.getDateConstraintAccess().getDtCNotNullParserRuleCall_2()); }
	)
	|
	(
		{ before(grammarAccess.getDateConstraintAccess().getDtCNullParserRuleCall_3()); }
		ruleDtCNull
		{ after(grammarAccess.getDateConstraintAccess().getDtCNullParserRuleCall_3()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BlobTypeConstraint__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBlobTypeConstraintAccess().getDtCNotNullParserRuleCall_0()); }
		ruleDtCNotNull
		{ after(grammarAccess.getBlobTypeConstraintAccess().getDtCNotNullParserRuleCall_0()); }
	)
	|
	(
		{ before(grammarAccess.getBlobTypeConstraintAccess().getDtCNullParserRuleCall_1()); }
		ruleDtCNull
		{ after(grammarAccess.getBlobTypeConstraintAccess().getDtCNullParserRuleCall_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__ScalarType__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getScalarTypeAccess().getDataTypeParserRuleCall_0()); }
		ruleDataType
		{ after(grammarAccess.getScalarTypeAccess().getDataTypeParserRuleCall_0()); }
	)
	|
	(
		{ before(grammarAccess.getScalarTypeAccess().getEnumParserRuleCall_1()); }
		ruleEnum
		{ after(grammarAccess.getScalarTypeAccess().getEnumParserRuleCall_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__AttributeMatchingConstraint__Alternatives_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getAttributeMatchingConstraintAccess().getMatchingValueAssignment_2_0()); }
		(rule__AttributeMatchingConstraint__MatchingValueAssignment_2_0)
		{ after(grammarAccess.getAttributeMatchingConstraintAccess().getMatchingValueAssignment_2_0()); }
	)
	|
	(
		{ before(grammarAccess.getAttributeMatchingConstraintAccess().getMatchingLiteralAssignment_2_1()); }
		(rule__AttributeMatchingConstraint__MatchingLiteralAssignment_2_1)
		{ after(grammarAccess.getAttributeMatchingConstraintAccess().getMatchingLiteralAssignment_2_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__ValidIDWithKeywords__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getValidIDWithKeywordsAccess().getCachableKeyword_0()); }
		'cachable'
		{ after(grammarAccess.getValidIDWithKeywordsAccess().getCachableKeyword_0()); }
	)
	|
	(
		{ before(grammarAccess.getValidIDWithKeywordsAccess().getIdKeyword_1()); }
		'id'
		{ after(grammarAccess.getValidIDWithKeywordsAccess().getIdKeyword_1()); }
	)
	|
	(
		{ before(grammarAccess.getValidIDWithKeywordsAccess().getUuidKeyword_2()); }
		'uuid'
		{ after(grammarAccess.getValidIDWithKeywordsAccess().getUuidKeyword_2()); }
	)
	|
	(
		{ before(grammarAccess.getValidIDWithKeywordsAccess().getTransientKeyword_3()); }
		'transient'
		{ after(grammarAccess.getValidIDWithKeywordsAccess().getTransientKeyword_3()); }
	)
	|
	(
		{ before(grammarAccess.getValidIDWithKeywordsAccess().getVersionKeyword_4()); }
		'version'
		{ after(grammarAccess.getValidIDWithKeywordsAccess().getVersionKeyword_4()); }
	)
	|
	(
		{ before(grammarAccess.getValidIDWithKeywordsAccess().getDerivedKeyword_5()); }
		'derived'
		{ after(grammarAccess.getValidIDWithKeywordsAccess().getDerivedKeyword_5()); }
	)
	|
	(
		{ before(grammarAccess.getValidIDWithKeywordsAccess().getCollectionKeyword_6()); }
		'collection'
		{ after(grammarAccess.getValidIDWithKeywordsAccess().getCollectionKeyword_6()); }
	)
	|
	(
		{ before(grammarAccess.getValidIDWithKeywordsAccess().getRefersKeyword_7()); }
		'refers'
		{ after(grammarAccess.getValidIDWithKeywordsAccess().getRefersKeyword_7()); }
	)
	|
	(
		{ before(grammarAccess.getValidIDWithKeywordsAccess().getSettingsKeyword_8()); }
		'settings'
		{ after(grammarAccess.getValidIDWithKeywordsAccess().getSettingsKeyword_8()); }
	)
	|
	(
		{ before(grammarAccess.getValidIDWithKeywordsAccess().getLazyKeyword_9()); }
		'lazy'
		{ after(grammarAccess.getValidIDWithKeywordsAccess().getLazyKeyword_9()); }
	)
	|
	(
		{ before(grammarAccess.getValidIDWithKeywordsAccess().getNotnullKeyword_10()); }
		'notnull'
		{ after(grammarAccess.getValidIDWithKeywordsAccess().getNotnullKeyword_10()); }
	)
	|
	(
		{ before(grammarAccess.getValidIDWithKeywordsAccess().getDtoKeyword_11()); }
		'dto'
		{ after(grammarAccess.getValidIDWithKeywordsAccess().getDtoKeyword_11()); }
	)
	|
	(
		{ before(grammarAccess.getValidIDWithKeywordsAccess().getDateKeyword_12()); }
		'date'
		{ after(grammarAccess.getValidIDWithKeywordsAccess().getDateKeyword_12()); }
	)
	|
	(
		{ before(grammarAccess.getValidIDWithKeywordsAccess().getMaptoKeyword_13()); }
		'mapto'
		{ after(grammarAccess.getValidIDWithKeywordsAccess().getMaptoKeyword_13()); }
	)
	|
	(
		{ before(grammarAccess.getValidIDWithKeywordsAccess().getRefKeyword_14()); }
		'ref'
		{ after(grammarAccess.getValidIDWithKeywordsAccess().getRefKeyword_14()); }
	)
	|
	(
		{ before(grammarAccess.getValidIDWithKeywordsAccess().getCascadeKeyword_15()); }
		'cascade'
		{ after(grammarAccess.getValidIDWithKeywordsAccess().getCascadeKeyword_15()); }
	)
	|
	(
		{ before(grammarAccess.getValidIDWithKeywordsAccess().getVarKeyword_16()); }
		'var'
		{ after(grammarAccess.getValidIDWithKeywordsAccess().getVarKeyword_16()); }
	)
	|
	(
		{ before(grammarAccess.getValidIDWithKeywordsAccess().getIDTerminalRuleCall_17()); }
		RULE_ID
		{ after(grammarAccess.getValidIDWithKeywordsAccess().getIDTerminalRuleCall_17()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__LInt__Alternatives_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getLIntAccess().getPlusSignKeyword_0_0()); }
		'+'
		{ after(grammarAccess.getLIntAccess().getPlusSignKeyword_0_0()); }
	)
	|
	(
		{ before(grammarAccess.getLIntAccess().getHyphenMinusKeyword_0_1()); }
		'-'
		{ after(grammarAccess.getLIntAccess().getHyphenMinusKeyword_0_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XImportDeclaration__Alternatives_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXImportDeclarationAccess().getGroup_2_0()); }
		(rule__XImportDeclaration__Group_2_0__0)
		{ after(grammarAccess.getXImportDeclarationAccess().getGroup_2_0()); }
	)
	|
	(
		{ before(grammarAccess.getXImportDeclarationAccess().getImportedTypeAssignment_2_1()); }
		(rule__XImportDeclaration__ImportedTypeAssignment_2_1)
		{ after(grammarAccess.getXImportDeclarationAccess().getImportedTypeAssignment_2_1()); }
	)
	|
	(
		{ before(grammarAccess.getXImportDeclarationAccess().getImportedNamespaceAssignment_2_2()); }
		(rule__XImportDeclaration__ImportedNamespaceAssignment_2_2)
		{ after(grammarAccess.getXImportDeclarationAccess().getImportedNamespaceAssignment_2_2()); }
	)
	|
	(
		{ before(grammarAccess.getXImportDeclarationAccess().getGroup_2_3()); }
		(rule__XImportDeclaration__Group_2_3__0)
		{ after(grammarAccess.getXImportDeclarationAccess().getGroup_2_3()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XImportDeclaration__Alternatives_2_0_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXImportDeclarationAccess().getWildcardAssignment_2_0_3_0()); }
		(rule__XImportDeclaration__WildcardAssignment_2_0_3_0)
		{ after(grammarAccess.getXImportDeclarationAccess().getWildcardAssignment_2_0_3_0()); }
	)
	|
	(
		{ before(grammarAccess.getXImportDeclarationAccess().getMemberNameAssignment_2_0_3_1()); }
		(rule__XImportDeclaration__MemberNameAssignment_2_0_3_1)
		{ after(grammarAccess.getXImportDeclarationAccess().getMemberNameAssignment_2_0_3_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotation__Alternatives_3_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXAnnotationAccess().getGroup_3_1_0()); }
		(rule__XAnnotation__Group_3_1_0__0)
		{ after(grammarAccess.getXAnnotationAccess().getGroup_3_1_0()); }
	)
	|
	(
		{ before(grammarAccess.getXAnnotationAccess().getValueAssignment_3_1_1()); }
		(rule__XAnnotation__ValueAssignment_3_1_1)
		{ after(grammarAccess.getXAnnotationAccess().getValueAssignment_3_1_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValueOrCommaList__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getGroup_0()); }
		(rule__XAnnotationElementValueOrCommaList__Group_0__0)
		{ after(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getGroup_0()); }
	)
	|
	(
		{ before(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getGroup_1()); }
		(rule__XAnnotationElementValueOrCommaList__Group_1__0)
		{ after(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getGroup_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValue__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXAnnotationElementValueAccess().getGroup_0()); }
		(rule__XAnnotationElementValue__Group_0__0)
		{ after(grammarAccess.getXAnnotationElementValueAccess().getGroup_0()); }
	)
	|
	(
		{ before(grammarAccess.getXAnnotationElementValueAccess().getXAnnotationOrExpressionParserRuleCall_1()); }
		ruleXAnnotationOrExpression
		{ after(grammarAccess.getXAnnotationElementValueAccess().getXAnnotationOrExpressionParserRuleCall_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationOrExpression__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXAnnotationOrExpressionAccess().getXAnnotationParserRuleCall_0()); }
		ruleXAnnotation
		{ after(grammarAccess.getXAnnotationOrExpressionAccess().getXAnnotationParserRuleCall_0()); }
	)
	|
	(
		{ before(grammarAccess.getXAnnotationOrExpressionAccess().getXExpressionParserRuleCall_1()); }
		ruleXExpression
		{ after(grammarAccess.getXAnnotationOrExpressionAccess().getXExpressionParserRuleCall_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAssignment__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXAssignmentAccess().getGroup_0()); }
		(rule__XAssignment__Group_0__0)
		{ after(grammarAccess.getXAssignmentAccess().getGroup_0()); }
	)
	|
	(
		{ before(grammarAccess.getXAssignmentAccess().getGroup_1()); }
		(rule__XAssignment__Group_1__0)
		{ after(grammarAccess.getXAssignmentAccess().getGroup_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__OpMultiAssign__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getOpMultiAssignAccess().getPlusSignEqualsSignKeyword_0()); }
		'+='
		{ after(grammarAccess.getOpMultiAssignAccess().getPlusSignEqualsSignKeyword_0()); }
	)
	|
	(
		{ before(grammarAccess.getOpMultiAssignAccess().getHyphenMinusEqualsSignKeyword_1()); }
		'-='
		{ after(grammarAccess.getOpMultiAssignAccess().getHyphenMinusEqualsSignKeyword_1()); }
	)
	|
	(
		{ before(grammarAccess.getOpMultiAssignAccess().getAsteriskEqualsSignKeyword_2()); }
		'*='
		{ after(grammarAccess.getOpMultiAssignAccess().getAsteriskEqualsSignKeyword_2()); }
	)
	|
	(
		{ before(grammarAccess.getOpMultiAssignAccess().getSolidusEqualsSignKeyword_3()); }
		'/='
		{ after(grammarAccess.getOpMultiAssignAccess().getSolidusEqualsSignKeyword_3()); }
	)
	|
	(
		{ before(grammarAccess.getOpMultiAssignAccess().getPercentSignEqualsSignKeyword_4()); }
		'%='
		{ after(grammarAccess.getOpMultiAssignAccess().getPercentSignEqualsSignKeyword_4()); }
	)
	|
	(
		{ before(grammarAccess.getOpMultiAssignAccess().getGroup_5()); }
		(rule__OpMultiAssign__Group_5__0)
		{ after(grammarAccess.getOpMultiAssignAccess().getGroup_5()); }
	)
	|
	(
		{ before(grammarAccess.getOpMultiAssignAccess().getGroup_6()); }
		(rule__OpMultiAssign__Group_6__0)
		{ after(grammarAccess.getOpMultiAssignAccess().getGroup_6()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__OpEquality__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getOpEqualityAccess().getEqualsSignEqualsSignKeyword_0()); }
		'=='
		{ after(grammarAccess.getOpEqualityAccess().getEqualsSignEqualsSignKeyword_0()); }
	)
	|
	(
		{ before(grammarAccess.getOpEqualityAccess().getExclamationMarkEqualsSignKeyword_1()); }
		'!='
		{ after(grammarAccess.getOpEqualityAccess().getExclamationMarkEqualsSignKeyword_1()); }
	)
	|
	(
		{ before(grammarAccess.getOpEqualityAccess().getEqualsSignEqualsSignEqualsSignKeyword_2()); }
		'==='
		{ after(grammarAccess.getOpEqualityAccess().getEqualsSignEqualsSignEqualsSignKeyword_2()); }
	)
	|
	(
		{ before(grammarAccess.getOpEqualityAccess().getExclamationMarkEqualsSignEqualsSignKeyword_3()); }
		'!=='
		{ after(grammarAccess.getOpEqualityAccess().getExclamationMarkEqualsSignEqualsSignKeyword_3()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XRelationalExpression__Alternatives_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXRelationalExpressionAccess().getGroup_1_0()); }
		(rule__XRelationalExpression__Group_1_0__0)
		{ after(grammarAccess.getXRelationalExpressionAccess().getGroup_1_0()); }
	)
	|
	(
		{ before(grammarAccess.getXRelationalExpressionAccess().getGroup_1_1()); }
		(rule__XRelationalExpression__Group_1_1__0)
		{ after(grammarAccess.getXRelationalExpressionAccess().getGroup_1_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__OpCompare__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getOpCompareAccess().getGreaterThanSignEqualsSignKeyword_0()); }
		'>='
		{ after(grammarAccess.getOpCompareAccess().getGreaterThanSignEqualsSignKeyword_0()); }
	)
	|
	(
		{ before(grammarAccess.getOpCompareAccess().getGroup_1()); }
		(rule__OpCompare__Group_1__0)
		{ after(grammarAccess.getOpCompareAccess().getGroup_1()); }
	)
	|
	(
		{ before(grammarAccess.getOpCompareAccess().getGreaterThanSignKeyword_2()); }
		'>'
		{ after(grammarAccess.getOpCompareAccess().getGreaterThanSignKeyword_2()); }
	)
	|
	(
		{ before(grammarAccess.getOpCompareAccess().getLessThanSignKeyword_3()); }
		'<'
		{ after(grammarAccess.getOpCompareAccess().getLessThanSignKeyword_3()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__OpOther__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getOpOtherAccess().getHyphenMinusGreaterThanSignKeyword_0()); }
		'->'
		{ after(grammarAccess.getOpOtherAccess().getHyphenMinusGreaterThanSignKeyword_0()); }
	)
	|
	(
		{ before(grammarAccess.getOpOtherAccess().getFullStopFullStopLessThanSignKeyword_1()); }
		'..<'
		{ after(grammarAccess.getOpOtherAccess().getFullStopFullStopLessThanSignKeyword_1()); }
	)
	|
	(
		{ before(grammarAccess.getOpOtherAccess().getGroup_2()); }
		(rule__OpOther__Group_2__0)
		{ after(grammarAccess.getOpOtherAccess().getGroup_2()); }
	)
	|
	(
		{ before(grammarAccess.getOpOtherAccess().getFullStopFullStopKeyword_3()); }
		'..'
		{ after(grammarAccess.getOpOtherAccess().getFullStopFullStopKeyword_3()); }
	)
	|
	(
		{ before(grammarAccess.getOpOtherAccess().getEqualsSignGreaterThanSignKeyword_4()); }
		'=>'
		{ after(grammarAccess.getOpOtherAccess().getEqualsSignGreaterThanSignKeyword_4()); }
	)
	|
	(
		{ before(grammarAccess.getOpOtherAccess().getGroup_5()); }
		(rule__OpOther__Group_5__0)
		{ after(grammarAccess.getOpOtherAccess().getGroup_5()); }
	)
	|
	(
		{ before(grammarAccess.getOpOtherAccess().getGroup_6()); }
		(rule__OpOther__Group_6__0)
		{ after(grammarAccess.getOpOtherAccess().getGroup_6()); }
	)
	|
	(
		{ before(grammarAccess.getOpOtherAccess().getLessThanSignGreaterThanSignKeyword_7()); }
		'<>'
		{ after(grammarAccess.getOpOtherAccess().getLessThanSignGreaterThanSignKeyword_7()); }
	)
	|
	(
		{ before(grammarAccess.getOpOtherAccess().getQuestionMarkColonKeyword_8()); }
		'?:'
		{ after(grammarAccess.getOpOtherAccess().getQuestionMarkColonKeyword_8()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__OpOther__Alternatives_5_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getOpOtherAccess().getGroup_5_1_0()); }
		(rule__OpOther__Group_5_1_0__0)
		{ after(grammarAccess.getOpOtherAccess().getGroup_5_1_0()); }
	)
	|
	(
		{ before(grammarAccess.getOpOtherAccess().getGreaterThanSignKeyword_5_1_1()); }
		'>'
		{ after(grammarAccess.getOpOtherAccess().getGreaterThanSignKeyword_5_1_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__OpOther__Alternatives_6_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getOpOtherAccess().getGroup_6_1_0()); }
		(rule__OpOther__Group_6_1_0__0)
		{ after(grammarAccess.getOpOtherAccess().getGroup_6_1_0()); }
	)
	|
	(
		{ before(grammarAccess.getOpOtherAccess().getLessThanSignKeyword_6_1_1()); }
		'<'
		{ after(grammarAccess.getOpOtherAccess().getLessThanSignKeyword_6_1_1()); }
	)
	|
	(
		{ before(grammarAccess.getOpOtherAccess().getEqualsSignGreaterThanSignKeyword_6_1_2()); }
		'=>'
		{ after(grammarAccess.getOpOtherAccess().getEqualsSignGreaterThanSignKeyword_6_1_2()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__OpAdd__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getOpAddAccess().getPlusSignKeyword_0()); }
		'+'
		{ after(grammarAccess.getOpAddAccess().getPlusSignKeyword_0()); }
	)
	|
	(
		{ before(grammarAccess.getOpAddAccess().getHyphenMinusKeyword_1()); }
		'-'
		{ after(grammarAccess.getOpAddAccess().getHyphenMinusKeyword_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__OpMulti__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getOpMultiAccess().getAsteriskKeyword_0()); }
		'*'
		{ after(grammarAccess.getOpMultiAccess().getAsteriskKeyword_0()); }
	)
	|
	(
		{ before(grammarAccess.getOpMultiAccess().getAsteriskAsteriskKeyword_1()); }
		'**'
		{ after(grammarAccess.getOpMultiAccess().getAsteriskAsteriskKeyword_1()); }
	)
	|
	(
		{ before(grammarAccess.getOpMultiAccess().getSolidusKeyword_2()); }
		'/'
		{ after(grammarAccess.getOpMultiAccess().getSolidusKeyword_2()); }
	)
	|
	(
		{ before(grammarAccess.getOpMultiAccess().getPercentSignKeyword_3()); }
		'%'
		{ after(grammarAccess.getOpMultiAccess().getPercentSignKeyword_3()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XUnaryOperation__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXUnaryOperationAccess().getGroup_0()); }
		(rule__XUnaryOperation__Group_0__0)
		{ after(grammarAccess.getXUnaryOperationAccess().getGroup_0()); }
	)
	|
	(
		{ before(grammarAccess.getXUnaryOperationAccess().getXCastedExpressionParserRuleCall_1()); }
		ruleXCastedExpression
		{ after(grammarAccess.getXUnaryOperationAccess().getXCastedExpressionParserRuleCall_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__OpUnary__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getOpUnaryAccess().getExclamationMarkKeyword_0()); }
		'!'
		{ after(grammarAccess.getOpUnaryAccess().getExclamationMarkKeyword_0()); }
	)
	|
	(
		{ before(grammarAccess.getOpUnaryAccess().getHyphenMinusKeyword_1()); }
		'-'
		{ after(grammarAccess.getOpUnaryAccess().getHyphenMinusKeyword_1()); }
	)
	|
	(
		{ before(grammarAccess.getOpUnaryAccess().getPlusSignKeyword_2()); }
		'+'
		{ after(grammarAccess.getOpUnaryAccess().getPlusSignKeyword_2()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__OpPostfix__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getOpPostfixAccess().getPlusSignPlusSignKeyword_0()); }
		'++'
		{ after(grammarAccess.getOpPostfixAccess().getPlusSignPlusSignKeyword_0()); }
	)
	|
	(
		{ before(grammarAccess.getOpPostfixAccess().getHyphenMinusHyphenMinusKeyword_1()); }
		'--'
		{ after(grammarAccess.getOpPostfixAccess().getHyphenMinusHyphenMinusKeyword_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Alternatives_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_0()); }
		(rule__XMemberFeatureCall__Group_1_0__0)
		{ after(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_0()); }
	)
	|
	(
		{ before(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_1()); }
		(rule__XMemberFeatureCall__Group_1_1__0)
		{ after(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Alternatives_1_0_0_0_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXMemberFeatureCallAccess().getFullStopKeyword_1_0_0_0_1_0()); }
		'.'
		{ after(grammarAccess.getXMemberFeatureCallAccess().getFullStopKeyword_1_0_0_0_1_0()); }
	)
	|
	(
		{ before(grammarAccess.getXMemberFeatureCallAccess().getExplicitStaticAssignment_1_0_0_0_1_1()); }
		(rule__XMemberFeatureCall__ExplicitStaticAssignment_1_0_0_0_1_1)
		{ after(grammarAccess.getXMemberFeatureCallAccess().getExplicitStaticAssignment_1_0_0_0_1_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Alternatives_1_1_0_0_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXMemberFeatureCallAccess().getFullStopKeyword_1_1_0_0_1_0()); }
		'.'
		{ after(grammarAccess.getXMemberFeatureCallAccess().getFullStopKeyword_1_1_0_0_1_0()); }
	)
	|
	(
		{ before(grammarAccess.getXMemberFeatureCallAccess().getNullSafeAssignment_1_1_0_0_1_1()); }
		(rule__XMemberFeatureCall__NullSafeAssignment_1_1_0_0_1_1)
		{ after(grammarAccess.getXMemberFeatureCallAccess().getNullSafeAssignment_1_1_0_0_1_1()); }
	)
	|
	(
		{ before(grammarAccess.getXMemberFeatureCallAccess().getExplicitStaticAssignment_1_1_0_0_1_2()); }
		(rule__XMemberFeatureCall__ExplicitStaticAssignment_1_1_0_0_1_2)
		{ after(grammarAccess.getXMemberFeatureCallAccess().getExplicitStaticAssignment_1_1_0_0_1_2()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Alternatives_1_1_3_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsAssignment_1_1_3_1_0()); }
		(rule__XMemberFeatureCall__MemberCallArgumentsAssignment_1_1_3_1_0)
		{ after(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsAssignment_1_1_3_1_0()); }
	)
	|
	(
		{ before(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_1_3_1_1()); }
		(rule__XMemberFeatureCall__Group_1_1_3_1_1__0)
		{ after(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_1_3_1_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XPrimaryExpression__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXPrimaryExpressionAccess().getXConstructorCallParserRuleCall_0()); }
		ruleXConstructorCall
		{ after(grammarAccess.getXPrimaryExpressionAccess().getXConstructorCallParserRuleCall_0()); }
	)
	|
	(
		{ before(grammarAccess.getXPrimaryExpressionAccess().getXBlockExpressionParserRuleCall_1()); }
		ruleXBlockExpression
		{ after(grammarAccess.getXPrimaryExpressionAccess().getXBlockExpressionParserRuleCall_1()); }
	)
	|
	(
		{ before(grammarAccess.getXPrimaryExpressionAccess().getXSwitchExpressionParserRuleCall_2()); }
		ruleXSwitchExpression
		{ after(grammarAccess.getXPrimaryExpressionAccess().getXSwitchExpressionParserRuleCall_2()); }
	)
	|
	(
		{ before(grammarAccess.getXPrimaryExpressionAccess().getXSynchronizedExpressionParserRuleCall_3()); }
		(ruleXSynchronizedExpression)
		{ after(grammarAccess.getXPrimaryExpressionAccess().getXSynchronizedExpressionParserRuleCall_3()); }
	)
	|
	(
		{ before(grammarAccess.getXPrimaryExpressionAccess().getXFeatureCallParserRuleCall_4()); }
		ruleXFeatureCall
		{ after(grammarAccess.getXPrimaryExpressionAccess().getXFeatureCallParserRuleCall_4()); }
	)
	|
	(
		{ before(grammarAccess.getXPrimaryExpressionAccess().getXLiteralParserRuleCall_5()); }
		ruleXLiteral
		{ after(grammarAccess.getXPrimaryExpressionAccess().getXLiteralParserRuleCall_5()); }
	)
	|
	(
		{ before(grammarAccess.getXPrimaryExpressionAccess().getXIfExpressionParserRuleCall_6()); }
		ruleXIfExpression
		{ after(grammarAccess.getXPrimaryExpressionAccess().getXIfExpressionParserRuleCall_6()); }
	)
	|
	(
		{ before(grammarAccess.getXPrimaryExpressionAccess().getXForLoopExpressionParserRuleCall_7()); }
		(ruleXForLoopExpression)
		{ after(grammarAccess.getXPrimaryExpressionAccess().getXForLoopExpressionParserRuleCall_7()); }
	)
	|
	(
		{ before(grammarAccess.getXPrimaryExpressionAccess().getXBasicForLoopExpressionParserRuleCall_8()); }
		ruleXBasicForLoopExpression
		{ after(grammarAccess.getXPrimaryExpressionAccess().getXBasicForLoopExpressionParserRuleCall_8()); }
	)
	|
	(
		{ before(grammarAccess.getXPrimaryExpressionAccess().getXWhileExpressionParserRuleCall_9()); }
		ruleXWhileExpression
		{ after(grammarAccess.getXPrimaryExpressionAccess().getXWhileExpressionParserRuleCall_9()); }
	)
	|
	(
		{ before(grammarAccess.getXPrimaryExpressionAccess().getXDoWhileExpressionParserRuleCall_10()); }
		ruleXDoWhileExpression
		{ after(grammarAccess.getXPrimaryExpressionAccess().getXDoWhileExpressionParserRuleCall_10()); }
	)
	|
	(
		{ before(grammarAccess.getXPrimaryExpressionAccess().getXThrowExpressionParserRuleCall_11()); }
		ruleXThrowExpression
		{ after(grammarAccess.getXPrimaryExpressionAccess().getXThrowExpressionParserRuleCall_11()); }
	)
	|
	(
		{ before(grammarAccess.getXPrimaryExpressionAccess().getXReturnExpressionParserRuleCall_12()); }
		ruleXReturnExpression
		{ after(grammarAccess.getXPrimaryExpressionAccess().getXReturnExpressionParserRuleCall_12()); }
	)
	|
	(
		{ before(grammarAccess.getXPrimaryExpressionAccess().getXTryCatchFinallyExpressionParserRuleCall_13()); }
		ruleXTryCatchFinallyExpression
		{ after(grammarAccess.getXPrimaryExpressionAccess().getXTryCatchFinallyExpressionParserRuleCall_13()); }
	)
	|
	(
		{ before(grammarAccess.getXPrimaryExpressionAccess().getXParenthesizedExpressionParserRuleCall_14()); }
		ruleXParenthesizedExpression
		{ after(grammarAccess.getXPrimaryExpressionAccess().getXParenthesizedExpressionParserRuleCall_14()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XLiteral__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXLiteralAccess().getXCollectionLiteralParserRuleCall_0()); }
		ruleXCollectionLiteral
		{ after(grammarAccess.getXLiteralAccess().getXCollectionLiteralParserRuleCall_0()); }
	)
	|
	(
		{ before(grammarAccess.getXLiteralAccess().getXClosureParserRuleCall_1()); }
		(ruleXClosure)
		{ after(grammarAccess.getXLiteralAccess().getXClosureParserRuleCall_1()); }
	)
	|
	(
		{ before(grammarAccess.getXLiteralAccess().getXBooleanLiteralParserRuleCall_2()); }
		ruleXBooleanLiteral
		{ after(grammarAccess.getXLiteralAccess().getXBooleanLiteralParserRuleCall_2()); }
	)
	|
	(
		{ before(grammarAccess.getXLiteralAccess().getXNumberLiteralParserRuleCall_3()); }
		ruleXNumberLiteral
		{ after(grammarAccess.getXLiteralAccess().getXNumberLiteralParserRuleCall_3()); }
	)
	|
	(
		{ before(grammarAccess.getXLiteralAccess().getXNullLiteralParserRuleCall_4()); }
		ruleXNullLiteral
		{ after(grammarAccess.getXLiteralAccess().getXNullLiteralParserRuleCall_4()); }
	)
	|
	(
		{ before(grammarAccess.getXLiteralAccess().getXStringLiteralParserRuleCall_5()); }
		ruleXStringLiteral
		{ after(grammarAccess.getXLiteralAccess().getXStringLiteralParserRuleCall_5()); }
	)
	|
	(
		{ before(grammarAccess.getXLiteralAccess().getXTypeLiteralParserRuleCall_6()); }
		ruleXTypeLiteral
		{ after(grammarAccess.getXLiteralAccess().getXTypeLiteralParserRuleCall_6()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XCollectionLiteral__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXCollectionLiteralAccess().getXSetLiteralParserRuleCall_0()); }
		ruleXSetLiteral
		{ after(grammarAccess.getXCollectionLiteralAccess().getXSetLiteralParserRuleCall_0()); }
	)
	|
	(
		{ before(grammarAccess.getXCollectionLiteralAccess().getXListLiteralParserRuleCall_1()); }
		ruleXListLiteral
		{ after(grammarAccess.getXCollectionLiteralAccess().getXListLiteralParserRuleCall_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__Alternatives_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXSwitchExpressionAccess().getGroup_2_0()); }
		(rule__XSwitchExpression__Group_2_0__0)
		{ after(grammarAccess.getXSwitchExpressionAccess().getGroup_2_0()); }
	)
	|
	(
		{ before(grammarAccess.getXSwitchExpressionAccess().getGroup_2_1()); }
		(rule__XSwitchExpression__Group_2_1__0)
		{ after(grammarAccess.getXSwitchExpressionAccess().getGroup_2_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XCasePart__Alternatives_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXCasePartAccess().getGroup_3_0()); }
		(rule__XCasePart__Group_3_0__0)
		{ after(grammarAccess.getXCasePartAccess().getGroup_3_0()); }
	)
	|
	(
		{ before(grammarAccess.getXCasePartAccess().getFallThroughAssignment_3_1()); }
		(rule__XCasePart__FallThroughAssignment_3_1)
		{ after(grammarAccess.getXCasePartAccess().getFallThroughAssignment_3_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XExpressionOrVarDeclaration__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXExpressionOrVarDeclarationAccess().getXVariableDeclarationParserRuleCall_0()); }
		ruleXVariableDeclaration
		{ after(grammarAccess.getXExpressionOrVarDeclarationAccess().getXVariableDeclarationParserRuleCall_0()); }
	)
	|
	(
		{ before(grammarAccess.getXExpressionOrVarDeclarationAccess().getXExpressionParserRuleCall_1()); }
		ruleXExpression
		{ after(grammarAccess.getXExpressionOrVarDeclarationAccess().getXExpressionParserRuleCall_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XVariableDeclaration__Alternatives_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXVariableDeclarationAccess().getWriteableAssignment_1_0()); }
		(rule__XVariableDeclaration__WriteableAssignment_1_0)
		{ after(grammarAccess.getXVariableDeclarationAccess().getWriteableAssignment_1_0()); }
	)
	|
	(
		{ before(grammarAccess.getXVariableDeclarationAccess().getValKeyword_1_1()); }
		'val'
		{ after(grammarAccess.getXVariableDeclarationAccess().getValKeyword_1_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XVariableDeclaration__Alternatives_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXVariableDeclarationAccess().getGroup_2_0()); }
		(rule__XVariableDeclaration__Group_2_0__0)
		{ after(grammarAccess.getXVariableDeclarationAccess().getGroup_2_0()); }
	)
	|
	(
		{ before(grammarAccess.getXVariableDeclarationAccess().getNameAssignment_2_1()); }
		(rule__XVariableDeclaration__NameAssignment_2_1)
		{ after(grammarAccess.getXVariableDeclarationAccess().getNameAssignment_2_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__Alternatives_3_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsAssignment_3_1_0()); }
		(rule__XFeatureCall__FeatureCallArgumentsAssignment_3_1_0)
		{ after(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsAssignment_3_1_0()); }
	)
	|
	(
		{ before(grammarAccess.getXFeatureCallAccess().getGroup_3_1_1()); }
		(rule__XFeatureCall__Group_3_1_1__0)
		{ after(grammarAccess.getXFeatureCallAccess().getGroup_3_1_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__FeatureCallID__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getFeatureCallIDAccess().getValidIDParserRuleCall_0()); }
		ruleValidID
		{ after(grammarAccess.getFeatureCallIDAccess().getValidIDParserRuleCall_0()); }
	)
	|
	(
		{ before(grammarAccess.getFeatureCallIDAccess().getExtendsKeyword_1()); }
		'extends'
		{ after(grammarAccess.getFeatureCallIDAccess().getExtendsKeyword_1()); }
	)
	|
	(
		{ before(grammarAccess.getFeatureCallIDAccess().getStaticKeyword_2()); }
		'static'
		{ after(grammarAccess.getFeatureCallIDAccess().getStaticKeyword_2()); }
	)
	|
	(
		{ before(grammarAccess.getFeatureCallIDAccess().getImportKeyword_3()); }
		'import'
		{ after(grammarAccess.getFeatureCallIDAccess().getImportKeyword_3()); }
	)
	|
	(
		{ before(grammarAccess.getFeatureCallIDAccess().getExtensionKeyword_4()); }
		'extension'
		{ after(grammarAccess.getFeatureCallIDAccess().getExtensionKeyword_4()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__IdOrSuper__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getIdOrSuperAccess().getFeatureCallIDParserRuleCall_0()); }
		ruleFeatureCallID
		{ after(grammarAccess.getIdOrSuperAccess().getFeatureCallIDParserRuleCall_0()); }
	)
	|
	(
		{ before(grammarAccess.getIdOrSuperAccess().getSuperKeyword_1()); }
		'super'
		{ after(grammarAccess.getIdOrSuperAccess().getSuperKeyword_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__Alternatives_4_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXConstructorCallAccess().getArgumentsAssignment_4_1_0()); }
		(rule__XConstructorCall__ArgumentsAssignment_4_1_0)
		{ after(grammarAccess.getXConstructorCallAccess().getArgumentsAssignment_4_1_0()); }
	)
	|
	(
		{ before(grammarAccess.getXConstructorCallAccess().getGroup_4_1_1()); }
		(rule__XConstructorCall__Group_4_1_1__0)
		{ after(grammarAccess.getXConstructorCallAccess().getGroup_4_1_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XBooleanLiteral__Alternatives_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXBooleanLiteralAccess().getFalseKeyword_1_0()); }
		'false'
		{ after(grammarAccess.getXBooleanLiteralAccess().getFalseKeyword_1_0()); }
	)
	|
	(
		{ before(grammarAccess.getXBooleanLiteralAccess().getIsTrueAssignment_1_1()); }
		(rule__XBooleanLiteral__IsTrueAssignment_1_1)
		{ after(grammarAccess.getXBooleanLiteralAccess().getIsTrueAssignment_1_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XTryCatchFinallyExpression__Alternatives_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXTryCatchFinallyExpressionAccess().getGroup_3_0()); }
		(rule__XTryCatchFinallyExpression__Group_3_0__0)
		{ after(grammarAccess.getXTryCatchFinallyExpressionAccess().getGroup_3_0()); }
	)
	|
	(
		{ before(grammarAccess.getXTryCatchFinallyExpressionAccess().getGroup_3_1()); }
		(rule__XTryCatchFinallyExpression__Group_3_1__0)
		{ after(grammarAccess.getXTryCatchFinallyExpressionAccess().getGroup_3_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__Number__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getNumberAccess().getHEXTerminalRuleCall_0()); }
		RULE_HEX
		{ after(grammarAccess.getNumberAccess().getHEXTerminalRuleCall_0()); }
	)
	|
	(
		{ before(grammarAccess.getNumberAccess().getGroup_1()); }
		(rule__Number__Group_1__0)
		{ after(grammarAccess.getNumberAccess().getGroup_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__Number__Alternatives_1_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getNumberAccess().getINTTerminalRuleCall_1_0_0()); }
		RULE_INT
		{ after(grammarAccess.getNumberAccess().getINTTerminalRuleCall_1_0_0()); }
	)
	|
	(
		{ before(grammarAccess.getNumberAccess().getDECIMALTerminalRuleCall_1_0_1()); }
		RULE_DECIMAL
		{ after(grammarAccess.getNumberAccess().getDECIMALTerminalRuleCall_1_0_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__Number__Alternatives_1_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getNumberAccess().getINTTerminalRuleCall_1_1_1_0()); }
		RULE_INT
		{ after(grammarAccess.getNumberAccess().getINTTerminalRuleCall_1_1_1_0()); }
	)
	|
	(
		{ before(grammarAccess.getNumberAccess().getDECIMALTerminalRuleCall_1_1_1_1()); }
		RULE_DECIMAL
		{ after(grammarAccess.getNumberAccess().getDECIMALTerminalRuleCall_1_1_1_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmTypeReference__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getJvmTypeReferenceAccess().getGroup_0()); }
		(rule__JvmTypeReference__Group_0__0)
		{ after(grammarAccess.getJvmTypeReferenceAccess().getGroup_0()); }
	)
	|
	(
		{ before(grammarAccess.getJvmTypeReferenceAccess().getXFunctionTypeRefParserRuleCall_1()); }
		ruleXFunctionTypeRef
		{ after(grammarAccess.getJvmTypeReferenceAccess().getXFunctionTypeRefParserRuleCall_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmArgumentTypeReference__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getJvmArgumentTypeReferenceAccess().getJvmTypeReferenceParserRuleCall_0()); }
		ruleJvmTypeReference
		{ after(grammarAccess.getJvmArgumentTypeReferenceAccess().getJvmTypeReferenceParserRuleCall_0()); }
	)
	|
	(
		{ before(grammarAccess.getJvmArgumentTypeReferenceAccess().getJvmWildcardTypeReferenceParserRuleCall_1()); }
		ruleJvmWildcardTypeReference
		{ after(grammarAccess.getJvmArgumentTypeReferenceAccess().getJvmWildcardTypeReferenceParserRuleCall_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmWildcardTypeReference__Alternatives_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getJvmWildcardTypeReferenceAccess().getGroup_2_0()); }
		(rule__JvmWildcardTypeReference__Group_2_0__0)
		{ after(grammarAccess.getJvmWildcardTypeReferenceAccess().getGroup_2_0()); }
	)
	|
	(
		{ before(grammarAccess.getJvmWildcardTypeReferenceAccess().getGroup_2_1()); }
		(rule__JvmWildcardTypeReference__Group_2_1__0)
		{ after(grammarAccess.getJvmWildcardTypeReferenceAccess().getGroup_2_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DiscriminatorType__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDiscriminatorTypeAccess().getINHERITEnumLiteralDeclaration_0()); }
		('INHERIT')
		{ after(grammarAccess.getDiscriminatorTypeAccess().getINHERITEnumLiteralDeclaration_0()); }
	)
	|
	(
		{ before(grammarAccess.getDiscriminatorTypeAccess().getSTRINGEnumLiteralDeclaration_1()); }
		('STRING')
		{ after(grammarAccess.getDiscriminatorTypeAccess().getSTRINGEnumLiteralDeclaration_1()); }
	)
	|
	(
		{ before(grammarAccess.getDiscriminatorTypeAccess().getCHAREnumLiteralDeclaration_2()); }
		('CHAR')
		{ after(grammarAccess.getDiscriminatorTypeAccess().getCHAREnumLiteralDeclaration_2()); }
	)
	|
	(
		{ before(grammarAccess.getDiscriminatorTypeAccess().getINTEGEREnumLiteralDeclaration_3()); }
		('INT')
		{ after(grammarAccess.getDiscriminatorTypeAccess().getINTEGEREnumLiteralDeclaration_3()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__LHistorizedDateType__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getLHistorizedDateTypeAccess().getDATEEnumLiteralDeclaration_0()); }
		('DATE')
		{ after(grammarAccess.getLHistorizedDateTypeAccess().getDATEEnumLiteralDeclaration_0()); }
	)
	|
	(
		{ before(grammarAccess.getLHistorizedDateTypeAccess().getTIMESTAMPEnumLiteralDeclaration_1()); }
		('TIMESTAMP')
		{ after(grammarAccess.getLHistorizedDateTypeAccess().getTIMESTAMPEnumLiteralDeclaration_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__ConstraintSeverity__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getConstraintSeverityAccess().getINFOEnumLiteralDeclaration_0()); }
		('info')
		{ after(grammarAccess.getConstraintSeverityAccess().getINFOEnumLiteralDeclaration_0()); }
	)
	|
	(
		{ before(grammarAccess.getConstraintSeverityAccess().getWARNINGEnumLiteralDeclaration_1()); }
		('warn')
		{ after(grammarAccess.getConstraintSeverityAccess().getWARNINGEnumLiteralDeclaration_1()); }
	)
	|
	(
		{ before(grammarAccess.getConstraintSeverityAccess().getERROREnumLiteralDeclaration_2()); }
		('error')
		{ after(grammarAccess.getConstraintSeverityAccess().getERROREnumLiteralDeclaration_2()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DateType__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDateTypeAccess().getDATEEnumLiteralDeclaration_0()); }
		('date')
		{ after(grammarAccess.getDateTypeAccess().getDATEEnumLiteralDeclaration_0()); }
	)
	|
	(
		{ before(grammarAccess.getDateTypeAccess().getTIMEEnumLiteralDeclaration_1()); }
		('time')
		{ after(grammarAccess.getDateTypeAccess().getTIMEEnumLiteralDeclaration_1()); }
	)
	|
	(
		{ before(grammarAccess.getDateTypeAccess().getTIMESTAMPEnumLiteralDeclaration_2()); }
		('timestamp')
		{ after(grammarAccess.getDateTypeAccess().getTIMESTAMPEnumLiteralDeclaration_2()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__LVisibility__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getLVisibilityAccess().getPACKAGEEnumLiteralDeclaration_0()); }
		('package')
		{ after(grammarAccess.getLVisibilityAccess().getPACKAGEEnumLiteralDeclaration_0()); }
	)
	|
	(
		{ before(grammarAccess.getLVisibilityAccess().getPRIVATEEnumLiteralDeclaration_1()); }
		('private')
		{ after(grammarAccess.getLVisibilityAccess().getPRIVATEEnumLiteralDeclaration_1()); }
	)
	|
	(
		{ before(grammarAccess.getLVisibilityAccess().getPROTECTEDEnumLiteralDeclaration_2()); }
		('protected')
		{ after(grammarAccess.getLVisibilityAccess().getPROTECTEDEnumLiteralDeclaration_2()); }
	)
	|
	(
		{ before(grammarAccess.getLVisibilityAccess().getPUBLICEnumLiteralDeclaration_3()); }
		('public')
		{ after(grammarAccess.getLVisibilityAccess().getPUBLICEnumLiteralDeclaration_3()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__LComparatorType__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getLComparatorTypeAccess().getEQUALSEnumLiteralDeclaration_0()); }
		('==')
		{ after(grammarAccess.getLComparatorTypeAccess().getEQUALSEnumLiteralDeclaration_0()); }
	)
	|
	(
		{ before(grammarAccess.getLComparatorTypeAccess().getGREATEREnumLiteralDeclaration_1()); }
		('>')
		{ after(grammarAccess.getLComparatorTypeAccess().getGREATEREnumLiteralDeclaration_1()); }
	)
	|
	(
		{ before(grammarAccess.getLComparatorTypeAccess().getLOWEREnumLiteralDeclaration_2()); }
		('<')
		{ after(grammarAccess.getLComparatorTypeAccess().getLOWEREnumLiteralDeclaration_2()); }
	)
	|
	(
		{ before(grammarAccess.getLComparatorTypeAccess().getGREATER_EQEnumLiteralDeclaration_3()); }
		('>=')
		{ after(grammarAccess.getLComparatorTypeAccess().getGREATER_EQEnumLiteralDeclaration_3()); }
	)
	|
	(
		{ before(grammarAccess.getLComparatorTypeAccess().getLOWER_EQEnumLiteralDeclaration_4()); }
		('<=')
		{ after(grammarAccess.getLComparatorTypeAccess().getLOWER_EQEnumLiteralDeclaration_4()); }
	)
	|
	(
		{ before(grammarAccess.getLComparatorTypeAccess().getNOT_EQEnumLiteralDeclaration_5()); }
		('<>')
		{ after(grammarAccess.getLComparatorTypeAccess().getNOT_EQEnumLiteralDeclaration_5()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__LowerBound__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getLowerBoundAccess().getMANYEnumLiteralDeclaration_0()); }
		('*')
		{ after(grammarAccess.getLowerBoundAccess().getMANYEnumLiteralDeclaration_0()); }
	)
	|
	(
		{ before(grammarAccess.getLowerBoundAccess().getZEROEnumLiteralDeclaration_1()); }
		('0')
		{ after(grammarAccess.getLowerBoundAccess().getZEROEnumLiteralDeclaration_1()); }
	)
	|
	(
		{ before(grammarAccess.getLowerBoundAccess().getOPTIONALEnumLiteralDeclaration_2()); }
		('?')
		{ after(grammarAccess.getLowerBoundAccess().getOPTIONALEnumLiteralDeclaration_2()); }
	)
	|
	(
		{ before(grammarAccess.getLowerBoundAccess().getATLEASTONEEnumLiteralDeclaration_3()); }
		('+')
		{ after(grammarAccess.getLowerBoundAccess().getATLEASTONEEnumLiteralDeclaration_3()); }
	)
	|
	(
		{ before(grammarAccess.getLowerBoundAccess().getONEEnumLiteralDeclaration_4()); }
		('1')
		{ after(grammarAccess.getLowerBoundAccess().getONEEnumLiteralDeclaration_4()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__UpperBound__Alternatives
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getUpperBoundAccess().getMANYEnumLiteralDeclaration_0()); }
		('*')
		{ after(grammarAccess.getUpperBoundAccess().getMANYEnumLiteralDeclaration_0()); }
	)
	|
	(
		{ before(grammarAccess.getUpperBoundAccess().getONEEnumLiteralDeclaration_1()); }
		('1')
		{ after(grammarAccess.getUpperBoundAccess().getONEEnumLiteralDeclaration_1()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityModel__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityModel__Group__0__Impl
	rule__EntityModel__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityModel__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityModelAccess().getImportSectionAssignment_0()); }
	(rule__EntityModel__ImportSectionAssignment_0)?
	{ after(grammarAccess.getEntityModelAccess().getImportSectionAssignment_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityModel__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityModel__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityModel__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityModelAccess().getPackagesAssignment_1()); }
	(rule__EntityModel__PackagesAssignment_1)*
	{ after(grammarAccess.getEntityModelAccess().getPackagesAssignment_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__Class__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group__0__Impl
	rule__Class__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getLClassAction_0()); }
	()
	{ after(grammarAccess.getClassAccess().getLClassAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group__1__Impl
	rule__Class__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getAnnotationsAssignment_1()); }
	(rule__Class__AnnotationsAssignment_1)*
	{ after(grammarAccess.getClassAccess().getAnnotationsAssignment_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getAlternatives_2()); }
	(rule__Class__Alternatives_2)
	{ after(grammarAccess.getClassAccess().getAlternatives_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__Class__Group_2_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_0__0__Impl
	rule__Class__Group_2_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getLEntityAnnotationInfoAction_2_0_0()); }
	()
	{ after(grammarAccess.getClassAccess().getLEntityAnnotationInfoAction_2_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_0__1__Impl
	rule__Class__Group_2_0__2
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getUnorderedGroup_2_0_1()); }
	(rule__Class__UnorderedGroup_2_0_1)
	{ after(grammarAccess.getClassAccess().getUnorderedGroup_2_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_0__2__Impl
	rule__Class__Group_2_0__3
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getEntityKeyword_2_0_2()); }
	'entity'
	{ after(grammarAccess.getClassAccess().getEntityKeyword_2_0_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_0__3__Impl
	rule__Class__Group_2_0__4
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getNameAssignment_2_0_3()); }
	(rule__Class__NameAssignment_2_0_3)
	{ after(grammarAccess.getClassAccess().getNameAssignment_2_0_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_0__4__Impl
	rule__Class__Group_2_0__5
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getGroup_2_0_4()); }
	(rule__Class__Group_2_0_4__0)?
	{ after(grammarAccess.getClassAccess().getGroup_2_0_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0__5
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_0__5__Impl
	rule__Class__Group_2_0__6
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0__5__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getLeftCurlyBracketKeyword_2_0_5()); }
	'{'
	{ after(grammarAccess.getClassAccess().getLeftCurlyBracketKeyword_2_0_5()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0__6
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_0__6__Impl
	rule__Class__Group_2_0__7
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0__6__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getPersistenceInfoAssignment_2_0_6()); }
	(rule__Class__PersistenceInfoAssignment_2_0_6)
	{ after(grammarAccess.getClassAccess().getPersistenceInfoAssignment_2_0_6()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0__7
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_0__7__Impl
	rule__Class__Group_2_0__8
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0__7__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getInheritanceStrategyAssignment_2_0_7()); }
	(rule__Class__InheritanceStrategyAssignment_2_0_7)?
	{ after(grammarAccess.getClassAccess().getInheritanceStrategyAssignment_2_0_7()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0__8
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_0__8__Impl
	rule__Class__Group_2_0__9
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0__8__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getGroup_2_0_8()); }
	(rule__Class__Group_2_0_8__0)?
	{ after(grammarAccess.getClassAccess().getGroup_2_0_8()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0__9
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_0__9__Impl
	rule__Class__Group_2_0__10
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0__9__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getFeaturesAssignment_2_0_9()); }
	(rule__Class__FeaturesAssignment_2_0_9)*
	{ after(grammarAccess.getClassAccess().getFeaturesAssignment_2_0_9()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0__10
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_0__10__Impl
	rule__Class__Group_2_0__11
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0__10__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getAlternatives_2_0_10()); }
	(rule__Class__Alternatives_2_0_10)*
	{ after(grammarAccess.getClassAccess().getAlternatives_2_0_10()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0__11
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_0__11__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0__11__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getRightCurlyBracketKeyword_2_0_11()); }
	'}'
	{ after(grammarAccess.getClassAccess().getRightCurlyBracketKeyword_2_0_11()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__Class__Group_2_0_1_1_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_0_1_1_1__0__Impl
	rule__Class__Group_2_0_1_1_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0_1_1_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getTimedependentAssignment_2_0_1_1_1_0()); }
	(rule__Class__TimedependentAssignment_2_0_1_1_1_0)
	{ after(grammarAccess.getClassAccess().getTimedependentAssignment_2_0_1_1_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0_1_1_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_0_1_1_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0_1_1_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getGroup_2_0_1_1_1_1()); }
	(rule__Class__Group_2_0_1_1_1_1__0)?
	{ after(grammarAccess.getClassAccess().getGroup_2_0_1_1_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__Class__Group_2_0_1_1_1_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_0_1_1_1_1__0__Impl
	rule__Class__Group_2_0_1_1_1_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0_1_1_1_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getLeftParenthesisKeyword_2_0_1_1_1_1_0()); }
	'('
	{ after(grammarAccess.getClassAccess().getLeftParenthesisKeyword_2_0_1_1_1_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0_1_1_1_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_0_1_1_1_1__1__Impl
	rule__Class__Group_2_0_1_1_1_1__2
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0_1_1_1_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getTimedependentDateTypeAssignment_2_0_1_1_1_1_1()); }
	(rule__Class__TimedependentDateTypeAssignment_2_0_1_1_1_1_1)
	{ after(grammarAccess.getClassAccess().getTimedependentDateTypeAssignment_2_0_1_1_1_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0_1_1_1_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_0_1_1_1_1__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0_1_1_1_1__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getRightParenthesisKeyword_2_0_1_1_1_1_2()); }
	')'
	{ after(grammarAccess.getClassAccess().getRightParenthesisKeyword_2_0_1_1_1_1_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__Class__Group_2_0_4__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_0_4__0__Impl
	rule__Class__Group_2_0_4__1
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0_4__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getExtendsKeyword_2_0_4_0()); }
	'extends'
	{ after(grammarAccess.getClassAccess().getExtendsKeyword_2_0_4_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0_4__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_0_4__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0_4__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getSuperTypeAssignment_2_0_4_1()); }
	(rule__Class__SuperTypeAssignment_2_0_4_1)
	{ after(grammarAccess.getClassAccess().getSuperTypeAssignment_2_0_4_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__Class__Group_2_0_8__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_0_8__0__Impl
	rule__Class__Group_2_0_8__1
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0_8__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getPersistenceUnitKeyword_2_0_8_0()); }
	'persistenceUnit'
	{ after(grammarAccess.getClassAccess().getPersistenceUnitKeyword_2_0_8_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0_8__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_0_8__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_0_8__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getPersistenceUnitAssignment_2_0_8_1()); }
	(rule__Class__PersistenceUnitAssignment_2_0_8_1)
	{ after(grammarAccess.getClassAccess().getPersistenceUnitAssignment_2_0_8_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__Class__Group_2_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_1__0__Impl
	rule__Class__Group_2_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getLEntityAnnotationInfoAction_2_1_0()); }
	()
	{ after(grammarAccess.getClassAccess().getLEntityAnnotationInfoAction_2_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_1__1__Impl
	rule__Class__Group_2_1__2
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getMappedSuperclassAssignment_2_1_1()); }
	(rule__Class__MappedSuperclassAssignment_2_1_1)
	{ after(grammarAccess.getClassAccess().getMappedSuperclassAssignment_2_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_1__2__Impl
	rule__Class__Group_2_1__3
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_1__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getGroup_2_1_2()); }
	(rule__Class__Group_2_1_2__0)?
	{ after(grammarAccess.getClassAccess().getGroup_2_1_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_1__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_1__3__Impl
	rule__Class__Group_2_1__4
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_1__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getNameAssignment_2_1_3()); }
	(rule__Class__NameAssignment_2_1_3)
	{ after(grammarAccess.getClassAccess().getNameAssignment_2_1_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_1__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_1__4__Impl
	rule__Class__Group_2_1__5
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_1__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getLeftCurlyBracketKeyword_2_1_4()); }
	'{'
	{ after(grammarAccess.getClassAccess().getLeftCurlyBracketKeyword_2_1_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_1__5
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_1__5__Impl
	rule__Class__Group_2_1__6
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_1__5__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getGroup_2_1_5()); }
	(rule__Class__Group_2_1_5__0)?
	{ after(grammarAccess.getClassAccess().getGroup_2_1_5()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_1__6
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_1__6__Impl
	rule__Class__Group_2_1__7
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_1__6__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getFeaturesAssignment_2_1_6()); }
	(rule__Class__FeaturesAssignment_2_1_6)*
	{ after(grammarAccess.getClassAccess().getFeaturesAssignment_2_1_6()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_1__7
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_1__7__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_1__7__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getRightCurlyBracketKeyword_2_1_7()); }
	'}'
	{ after(grammarAccess.getClassAccess().getRightCurlyBracketKeyword_2_1_7()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__Class__Group_2_1_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_1_2__0__Impl
	rule__Class__Group_2_1_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_1_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getExtendsKeyword_2_1_2_0()); }
	'extends'
	{ after(grammarAccess.getClassAccess().getExtendsKeyword_2_1_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_1_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_1_2__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_1_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getSuperTypeAssignment_2_1_2_1()); }
	(rule__Class__SuperTypeAssignment_2_1_2_1)
	{ after(grammarAccess.getClassAccess().getSuperTypeAssignment_2_1_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__Class__Group_2_1_5__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_1_5__0__Impl
	rule__Class__Group_2_1_5__1
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_1_5__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getPersistenceUnitKeyword_2_1_5_0()); }
	'persistenceUnit'
	{ after(grammarAccess.getClassAccess().getPersistenceUnitKeyword_2_1_5_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_1_5__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_1_5__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_1_5__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getPersistenceUnitAssignment_2_1_5_1()); }
	(rule__Class__PersistenceUnitAssignment_2_1_5_1)
	{ after(grammarAccess.getClassAccess().getPersistenceUnitAssignment_2_1_5_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__Class__Group_2_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_2__0__Impl
	rule__Class__Group_2_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getLBeanAnnotationInfoAction_2_2_0()); }
	()
	{ after(grammarAccess.getClassAccess().getLBeanAnnotationInfoAction_2_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_2__1__Impl
	rule__Class__Group_2_2__2
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getBeanKeyword_2_2_1()); }
	'bean'
	{ after(grammarAccess.getClassAccess().getBeanKeyword_2_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_2__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_2__2__Impl
	rule__Class__Group_2_2__3
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_2__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getNameAssignment_2_2_2()); }
	(rule__Class__NameAssignment_2_2_2)
	{ after(grammarAccess.getClassAccess().getNameAssignment_2_2_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_2__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_2__3__Impl
	rule__Class__Group_2_2__4
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_2__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getGroup_2_2_3()); }
	(rule__Class__Group_2_2_3__0)?
	{ after(grammarAccess.getClassAccess().getGroup_2_2_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_2__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_2__4__Impl
	rule__Class__Group_2_2__5
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_2__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getLeftCurlyBracketKeyword_2_2_4()); }
	'{'
	{ after(grammarAccess.getClassAccess().getLeftCurlyBracketKeyword_2_2_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_2__5
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_2__5__Impl
	rule__Class__Group_2_2__6
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_2__5__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getFeaturesAssignment_2_2_5()); }
	(rule__Class__FeaturesAssignment_2_2_5)*
	{ after(grammarAccess.getClassAccess().getFeaturesAssignment_2_2_5()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_2__6
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_2__6__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_2__6__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getRightCurlyBracketKeyword_2_2_6()); }
	'}'
	{ after(grammarAccess.getClassAccess().getRightCurlyBracketKeyword_2_2_6()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__Class__Group_2_2_3__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_2_3__0__Impl
	rule__Class__Group_2_2_3__1
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_2_3__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getExtendsKeyword_2_2_3_0()); }
	'extends'
	{ after(grammarAccess.getClassAccess().getExtendsKeyword_2_2_3_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_2_3__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__Group_2_2_3__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__Group_2_2_3__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getClassAccess().getSuperTypeAssignment_2_2_3_1()); }
	(rule__Class__SuperTypeAssignment_2_2_3_1)
	{ after(grammarAccess.getClassAccess().getSuperTypeAssignment_2_2_3_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__Index__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Index__Group__0__Impl
	rule__Index__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__Index__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getIndexAccess().getUniqueAssignment_0()); }
	(rule__Index__UniqueAssignment_0)?
	{ after(grammarAccess.getIndexAccess().getUniqueAssignment_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Index__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Index__Group__1__Impl
	rule__Index__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__Index__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getIndexAccess().getIndexKeyword_1()); }
	'index'
	{ after(grammarAccess.getIndexAccess().getIndexKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Index__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Index__Group__2__Impl
	rule__Index__Group__3
;
finally {
	restoreStackSize(stackSize);
}

rule__Index__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getIndexAccess().getNameAssignment_2()); }
	(rule__Index__NameAssignment_2)
	{ after(grammarAccess.getIndexAccess().getNameAssignment_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Index__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Index__Group__3__Impl
	rule__Index__Group__4
;
finally {
	restoreStackSize(stackSize);
}

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

rule__Index__Group__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Index__Group__4__Impl
	rule__Index__Group__5
;
finally {
	restoreStackSize(stackSize);
}

rule__Index__Group__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getIndexAccess().getFeaturesAssignment_4()); }
	(rule__Index__FeaturesAssignment_4)
	{ after(grammarAccess.getIndexAccess().getFeaturesAssignment_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Index__Group__5
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Index__Group__5__Impl
	rule__Index__Group__6
;
finally {
	restoreStackSize(stackSize);
}

rule__Index__Group__5__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getIndexAccess().getGroup_5()); }
	(rule__Index__Group_5__0)*
	{ after(grammarAccess.getIndexAccess().getGroup_5()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Index__Group__6
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Index__Group__6__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__Index__Group__6__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getIndexAccess().getRightCurlyBracketKeyword_6()); }
	'}'
	{ after(grammarAccess.getIndexAccess().getRightCurlyBracketKeyword_6()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__Index__Group_5__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Index__Group_5__0__Impl
	rule__Index__Group_5__1
;
finally {
	restoreStackSize(stackSize);
}

rule__Index__Group_5__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getIndexAccess().getCommaKeyword_5_0()); }
	','
	{ after(grammarAccess.getIndexAccess().getCommaKeyword_5_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Index__Group_5__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Index__Group_5__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__Index__Group_5__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getIndexAccess().getFeaturesAssignment_5_1()); }
	(rule__Index__FeaturesAssignment_5_1)
	{ after(grammarAccess.getIndexAccess().getFeaturesAssignment_5_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EntityPersistenceInfo__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityPersistenceInfo__Group__0__Impl
	rule__EntityPersistenceInfo__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityPersistenceInfo__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityPersistenceInfoAccess().getLEntityPersistenceInfoAction_0()); }
	()
	{ after(grammarAccess.getEntityPersistenceInfoAccess().getLEntityPersistenceInfoAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityPersistenceInfo__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityPersistenceInfo__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityPersistenceInfo__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityPersistenceInfoAccess().getUnorderedGroup_1()); }
	(rule__EntityPersistenceInfo__UnorderedGroup_1)
	{ after(grammarAccess.getEntityPersistenceInfoAccess().getUnorderedGroup_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EntityPersistenceInfo__Group_1_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityPersistenceInfo__Group_1_0__0__Impl
	rule__EntityPersistenceInfo__Group_1_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityPersistenceInfo__Group_1_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityPersistenceInfoAccess().getSchemaNameKeyword_1_0_0()); }
	'schemaName'
	{ after(grammarAccess.getEntityPersistenceInfoAccess().getSchemaNameKeyword_1_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityPersistenceInfo__Group_1_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityPersistenceInfo__Group_1_0__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityPersistenceInfo__Group_1_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityPersistenceInfoAccess().getSchemaNameAssignment_1_0_1()); }
	(rule__EntityPersistenceInfo__SchemaNameAssignment_1_0_1)
	{ after(grammarAccess.getEntityPersistenceInfoAccess().getSchemaNameAssignment_1_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EntityPersistenceInfo__Group_1_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityPersistenceInfo__Group_1_1__0__Impl
	rule__EntityPersistenceInfo__Group_1_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityPersistenceInfo__Group_1_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityPersistenceInfoAccess().getTableNameKeyword_1_1_0()); }
	'tableName'
	{ after(grammarAccess.getEntityPersistenceInfoAccess().getTableNameKeyword_1_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityPersistenceInfo__Group_1_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityPersistenceInfo__Group_1_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityPersistenceInfo__Group_1_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityPersistenceInfoAccess().getTableNameAssignment_1_1_1()); }
	(rule__EntityPersistenceInfo__TableNameAssignment_1_1_1)
	{ after(grammarAccess.getEntityPersistenceInfoAccess().getTableNameAssignment_1_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__ColumnPersistenceInfo__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__ColumnPersistenceInfo__Group__0__Impl
	rule__ColumnPersistenceInfo__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__ColumnPersistenceInfo__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getColumnPersistenceInfoAccess().getLEntityColumnPersistenceInfoAction_0()); }
	()
	{ after(grammarAccess.getColumnPersistenceInfoAccess().getLEntityColumnPersistenceInfoAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__ColumnPersistenceInfo__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__ColumnPersistenceInfo__Group__1__Impl
	rule__ColumnPersistenceInfo__Group__2
;
finally {
	restoreStackSize(stackSize);
}

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

rule__ColumnPersistenceInfo__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__ColumnPersistenceInfo__Group__2__Impl
	rule__ColumnPersistenceInfo__Group__3
;
finally {
	restoreStackSize(stackSize);
}

rule__ColumnPersistenceInfo__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getColumnPersistenceInfoAccess().getColumnNameAssignment_2()); }
	(rule__ColumnPersistenceInfo__ColumnNameAssignment_2)
	{ after(grammarAccess.getColumnPersistenceInfoAccess().getColumnNameAssignment_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__ColumnPersistenceInfo__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__ColumnPersistenceInfo__Group__3__Impl
;
finally {
	restoreStackSize(stackSize);
}

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


rule__EntityFeature__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group__0__Impl
	rule__EntityFeature__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getLEntityFeatureAction_0()); }
	()
	{ after(grammarAccess.getEntityFeatureAccess().getLEntityFeatureAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group__1__Impl
	rule__EntityFeature__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getAnnotationsAssignment_1()); }
	(rule__EntityFeature__AnnotationsAssignment_1)*
	{ after(grammarAccess.getEntityFeatureAccess().getAnnotationsAssignment_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getAlternatives_2()); }
	(rule__EntityFeature__Alternatives_2)
	{ after(grammarAccess.getEntityFeatureAccess().getAlternatives_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EntityFeature__Group_2_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_0__0__Impl
	rule__EntityFeature__Group_2_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getLEntityReferenceAnnotationInfoAction_2_0_0()); }
	()
	{ after(grammarAccess.getEntityFeatureAccess().getLEntityReferenceAnnotationInfoAction_2_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_0__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getGroup_2_0_1()); }
	(rule__EntityFeature__Group_2_0_1__0)
	{ after(grammarAccess.getEntityFeatureAccess().getGroup_2_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EntityFeature__Group_2_0_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_0_1__0__Impl
	rule__EntityFeature__Group_2_0_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getRefKeyword_2_0_1_0()); }
	'ref'
	{ after(grammarAccess.getEntityFeatureAccess().getRefKeyword_2_0_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_0_1__1__Impl
	rule__EntityFeature__Group_2_0_1__2
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getCascadingAssignment_2_0_1_1()); }
	(rule__EntityFeature__CascadingAssignment_2_0_1_1)?
	{ after(grammarAccess.getEntityFeatureAccess().getCascadingAssignment_2_0_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_0_1__2__Impl
	rule__EntityFeature__Group_2_0_1__3
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getGroup_2_0_1_2()); }
	(rule__EntityFeature__Group_2_0_1_2__0)?
	{ after(grammarAccess.getEntityFeatureAccess().getGroup_2_0_1_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_0_1__3__Impl
	rule__EntityFeature__Group_2_0_1__4
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getTypeAssignment_2_0_1_3()); }
	(rule__EntityFeature__TypeAssignment_2_0_1_3)
	{ after(grammarAccess.getEntityFeatureAccess().getTypeAssignment_2_0_1_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_0_1__4__Impl
	rule__EntityFeature__Group_2_0_1__5
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getMultiplicityAssignment_2_0_1_4()); }
	(rule__EntityFeature__MultiplicityAssignment_2_0_1_4)?
	{ after(grammarAccess.getEntityFeatureAccess().getMultiplicityAssignment_2_0_1_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1__5
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_0_1__5__Impl
	rule__EntityFeature__Group_2_0_1__6
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1__5__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getGroup_2_0_1_5()); }
	(rule__EntityFeature__Group_2_0_1_5__0)?
	{ after(grammarAccess.getEntityFeatureAccess().getGroup_2_0_1_5()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1__6
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_0_1__6__Impl
	rule__EntityFeature__Group_2_0_1__7
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1__6__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getNameAssignment_2_0_1_6()); }
	(rule__EntityFeature__NameAssignment_2_0_1_6)
	{ after(grammarAccess.getEntityFeatureAccess().getNameAssignment_2_0_1_6()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1__7
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_0_1__7__Impl
	rule__EntityFeature__Group_2_0_1__8
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1__7__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getPersistenceInfoAssignment_2_0_1_7()); }
	(rule__EntityFeature__PersistenceInfoAssignment_2_0_1_7)?
	{ after(grammarAccess.getEntityFeatureAccess().getPersistenceInfoAssignment_2_0_1_7()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1__8
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_0_1__8__Impl
	rule__EntityFeature__Group_2_0_1__9
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1__8__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getGroup_2_0_1_8()); }
	(rule__EntityFeature__Group_2_0_1_8__0)?
	{ after(grammarAccess.getEntityFeatureAccess().getGroup_2_0_1_8()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1__9
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_0_1__9__Impl
	rule__EntityFeature__Group_2_0_1__10
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1__9__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getGroup_2_0_1_9()); }
	(rule__EntityFeature__Group_2_0_1_9__0)?
	{ after(grammarAccess.getEntityFeatureAccess().getGroup_2_0_1_9()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1__10
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_0_1__10__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1__10__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getResultFiltersAssignment_2_0_1_10()); }
	(rule__EntityFeature__ResultFiltersAssignment_2_0_1_10)?
	{ after(grammarAccess.getEntityFeatureAccess().getResultFiltersAssignment_2_0_1_10()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EntityFeature__Group_2_0_1_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_0_1_2__0__Impl
	rule__EntityFeature__Group_2_0_1_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getFilterDepthKeyword_2_0_1_2_0()); }
	'filterDepth'
	{ after(grammarAccess.getEntityFeatureAccess().getFilterDepthKeyword_2_0_1_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_0_1_2__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getFilterDepthAssignment_2_0_1_2_1()); }
	(rule__EntityFeature__FilterDepthAssignment_2_0_1_2_1)
	{ after(grammarAccess.getEntityFeatureAccess().getFilterDepthAssignment_2_0_1_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EntityFeature__Group_2_0_1_5__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_0_1_5__0__Impl
	rule__EntityFeature__Group_2_0_1_5__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1_5__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getLeftSquareBracketKeyword_2_0_1_5_0()); }
	'['
	{ after(grammarAccess.getEntityFeatureAccess().getLeftSquareBracketKeyword_2_0_1_5_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1_5__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_0_1_5__1__Impl
	rule__EntityFeature__Group_2_0_1_5__2
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1_5__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getConstraintsAssignment_2_0_1_5_1()); }
	(rule__EntityFeature__ConstraintsAssignment_2_0_1_5_1)*
	{ after(grammarAccess.getEntityFeatureAccess().getConstraintsAssignment_2_0_1_5_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1_5__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_0_1_5__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1_5__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getRightSquareBracketKeyword_2_0_1_5_2()); }
	']'
	{ after(grammarAccess.getEntityFeatureAccess().getRightSquareBracketKeyword_2_0_1_5_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EntityFeature__Group_2_0_1_8__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_0_1_8__0__Impl
	rule__EntityFeature__Group_2_0_1_8__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1_8__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getOppositeKeyword_2_0_1_8_0()); }
	'opposite'
	{ after(grammarAccess.getEntityFeatureAccess().getOppositeKeyword_2_0_1_8_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1_8__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_0_1_8__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1_8__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getOppositeAssignment_2_0_1_8_1()); }
	(rule__EntityFeature__OppositeAssignment_2_0_1_8_1)
	{ after(grammarAccess.getEntityFeatureAccess().getOppositeAssignment_2_0_1_8_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EntityFeature__Group_2_0_1_9__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_0_1_9__0__Impl
	rule__EntityFeature__Group_2_0_1_9__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1_9__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getPropertiesKeyword_2_0_1_9_0()); }
	'properties'
	{ after(grammarAccess.getEntityFeatureAccess().getPropertiesKeyword_2_0_1_9_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1_9__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_0_1_9__1__Impl
	rule__EntityFeature__Group_2_0_1_9__2
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1_9__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getLeftParenthesisKeyword_2_0_1_9_1()); }
	'('
	{ after(grammarAccess.getEntityFeatureAccess().getLeftParenthesisKeyword_2_0_1_9_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1_9__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_0_1_9__2__Impl
	rule__EntityFeature__Group_2_0_1_9__3
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1_9__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getPropertiesAssignment_2_0_1_9_2()); }
	(rule__EntityFeature__PropertiesAssignment_2_0_1_9_2)
	{ after(grammarAccess.getEntityFeatureAccess().getPropertiesAssignment_2_0_1_9_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1_9__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_0_1_9__3__Impl
	rule__EntityFeature__Group_2_0_1_9__4
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1_9__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getGroup_2_0_1_9_3()); }
	(rule__EntityFeature__Group_2_0_1_9_3__0)*
	{ after(grammarAccess.getEntityFeatureAccess().getGroup_2_0_1_9_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1_9__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_0_1_9__4__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1_9__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getRightParenthesisKeyword_2_0_1_9_4()); }
	')'
	{ after(grammarAccess.getEntityFeatureAccess().getRightParenthesisKeyword_2_0_1_9_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EntityFeature__Group_2_0_1_9_3__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_0_1_9_3__0__Impl
	rule__EntityFeature__Group_2_0_1_9_3__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1_9_3__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getCommaKeyword_2_0_1_9_3_0()); }
	','
	{ after(grammarAccess.getEntityFeatureAccess().getCommaKeyword_2_0_1_9_3_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1_9_3__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_0_1_9_3__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_0_1_9_3__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getPropertiesAssignment_2_0_1_9_3_1()); }
	(rule__EntityFeature__PropertiesAssignment_2_0_1_9_3_1)
	{ after(grammarAccess.getEntityFeatureAccess().getPropertiesAssignment_2_0_1_9_3_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EntityFeature__Group_2_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1__0__Impl
	rule__EntityFeature__Group_2_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getLEntityAttributeAnnotationInfoAction_2_1_0()); }
	()
	{ after(grammarAccess.getEntityFeatureAccess().getLEntityAttributeAnnotationInfoAction_2_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getAlternatives_2_1_1()); }
	(rule__EntityFeature__Alternatives_2_1_1)
	{ after(grammarAccess.getEntityFeatureAccess().getAlternatives_2_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EntityFeature__Group_2_1_1_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_0__0__Impl
	rule__EntityFeature__Group_2_1_1_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getTransientAssignment_2_1_1_0_0()); }
	(rule__EntityFeature__TransientAssignment_2_1_1_0_0)
	{ after(grammarAccess.getEntityFeatureAccess().getTransientAssignment_2_1_1_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_0__1__Impl
	rule__EntityFeature__Group_2_1_1_0__2
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getTypeAssignment_2_1_1_0_1()); }
	(rule__EntityFeature__TypeAssignment_2_1_1_0_1)
	{ after(grammarAccess.getEntityFeatureAccess().getTypeAssignment_2_1_1_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_0__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_0__2__Impl
	rule__EntityFeature__Group_2_1_1_0__3
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_0__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getGroup_2_1_1_0_2()); }
	(rule__EntityFeature__Group_2_1_1_0_2__0)?
	{ after(grammarAccess.getEntityFeatureAccess().getGroup_2_1_1_0_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_0__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_0__3__Impl
	rule__EntityFeature__Group_2_1_1_0__4
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_0__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getNameAssignment_2_1_1_0_3()); }
	(rule__EntityFeature__NameAssignment_2_1_1_0_3)
	{ after(grammarAccess.getEntityFeatureAccess().getNameAssignment_2_1_1_0_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_0__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_0__4__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_0__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getGroup_2_1_1_0_4()); }
	(rule__EntityFeature__Group_2_1_1_0_4__0)?
	{ after(grammarAccess.getEntityFeatureAccess().getGroup_2_1_1_0_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EntityFeature__Group_2_1_1_0_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_0_2__0__Impl
	rule__EntityFeature__Group_2_1_1_0_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_0_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getLeftSquareBracketKeyword_2_1_1_0_2_0()); }
	'['
	{ after(grammarAccess.getEntityFeatureAccess().getLeftSquareBracketKeyword_2_1_1_0_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_0_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_0_2__1__Impl
	rule__EntityFeature__Group_2_1_1_0_2__2
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_0_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getConstraintsAssignment_2_1_1_0_2_1()); }
	(rule__EntityFeature__ConstraintsAssignment_2_1_1_0_2_1)*
	{ after(grammarAccess.getEntityFeatureAccess().getConstraintsAssignment_2_1_1_0_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_0_2__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_0_2__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_0_2__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getRightSquareBracketKeyword_2_1_1_0_2_2()); }
	']'
	{ after(grammarAccess.getEntityFeatureAccess().getRightSquareBracketKeyword_2_1_1_0_2_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EntityFeature__Group_2_1_1_0_4__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_0_4__0__Impl
	rule__EntityFeature__Group_2_1_1_0_4__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_0_4__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getPropertiesKeyword_2_1_1_0_4_0()); }
	'properties'
	{ after(grammarAccess.getEntityFeatureAccess().getPropertiesKeyword_2_1_1_0_4_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_0_4__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_0_4__1__Impl
	rule__EntityFeature__Group_2_1_1_0_4__2
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_0_4__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getLeftParenthesisKeyword_2_1_1_0_4_1()); }
	'('
	{ after(grammarAccess.getEntityFeatureAccess().getLeftParenthesisKeyword_2_1_1_0_4_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_0_4__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_0_4__2__Impl
	rule__EntityFeature__Group_2_1_1_0_4__3
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_0_4__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getPropertiesAssignment_2_1_1_0_4_2()); }
	(rule__EntityFeature__PropertiesAssignment_2_1_1_0_4_2)
	{ after(grammarAccess.getEntityFeatureAccess().getPropertiesAssignment_2_1_1_0_4_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_0_4__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_0_4__3__Impl
	rule__EntityFeature__Group_2_1_1_0_4__4
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_0_4__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getGroup_2_1_1_0_4_3()); }
	(rule__EntityFeature__Group_2_1_1_0_4_3__0)*
	{ after(grammarAccess.getEntityFeatureAccess().getGroup_2_1_1_0_4_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_0_4__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_0_4__4__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_0_4__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getRightParenthesisKeyword_2_1_1_0_4_4()); }
	')'
	{ after(grammarAccess.getEntityFeatureAccess().getRightParenthesisKeyword_2_1_1_0_4_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EntityFeature__Group_2_1_1_0_4_3__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_0_4_3__0__Impl
	rule__EntityFeature__Group_2_1_1_0_4_3__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_0_4_3__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getCommaKeyword_2_1_1_0_4_3_0()); }
	','
	{ after(grammarAccess.getEntityFeatureAccess().getCommaKeyword_2_1_1_0_4_3_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_0_4_3__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_0_4_3__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_0_4_3__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getPropertiesAssignment_2_1_1_0_4_3_1()); }
	(rule__EntityFeature__PropertiesAssignment_2_1_1_0_4_3_1)
	{ after(grammarAccess.getEntityFeatureAccess().getPropertiesAssignment_2_1_1_0_4_3_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EntityFeature__Group_2_1_1_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_1__0__Impl
	rule__EntityFeature__Group_2_1_1_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getDerivedAssignment_2_1_1_1_0()); }
	(rule__EntityFeature__DerivedAssignment_2_1_1_1_0)
	{ after(grammarAccess.getEntityFeatureAccess().getDerivedAssignment_2_1_1_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_1__1__Impl
	rule__EntityFeature__Group_2_1_1_1__2
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getDomainDescriptionAssignment_2_1_1_1_1()); }
	(rule__EntityFeature__DomainDescriptionAssignment_2_1_1_1_1)?
	{ after(grammarAccess.getEntityFeatureAccess().getDomainDescriptionAssignment_2_1_1_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_1__2__Impl
	rule__EntityFeature__Group_2_1_1_1__3
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_1__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getTypeAssignment_2_1_1_1_2()); }
	(rule__EntityFeature__TypeAssignment_2_1_1_1_2)
	{ after(grammarAccess.getEntityFeatureAccess().getTypeAssignment_2_1_1_1_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_1__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_1__3__Impl
	rule__EntityFeature__Group_2_1_1_1__4
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_1__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getNameAssignment_2_1_1_1_3()); }
	(rule__EntityFeature__NameAssignment_2_1_1_1_3)
	{ after(grammarAccess.getEntityFeatureAccess().getNameAssignment_2_1_1_1_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_1__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_1__4__Impl
	rule__EntityFeature__Group_2_1_1_1__5
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_1__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getGroup_2_1_1_1_4()); }
	(rule__EntityFeature__Group_2_1_1_1_4__0)?
	{ after(grammarAccess.getEntityFeatureAccess().getGroup_2_1_1_1_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_1__5
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_1__5__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_1__5__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getDerivedGetterExpressionAssignment_2_1_1_1_5()); }
	(rule__EntityFeature__DerivedGetterExpressionAssignment_2_1_1_1_5)
	{ after(grammarAccess.getEntityFeatureAccess().getDerivedGetterExpressionAssignment_2_1_1_1_5()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EntityFeature__Group_2_1_1_1_4__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_1_4__0__Impl
	rule__EntityFeature__Group_2_1_1_1_4__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_1_4__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getPropertiesKeyword_2_1_1_1_4_0()); }
	'properties'
	{ after(grammarAccess.getEntityFeatureAccess().getPropertiesKeyword_2_1_1_1_4_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_1_4__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_1_4__1__Impl
	rule__EntityFeature__Group_2_1_1_1_4__2
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_1_4__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getLeftParenthesisKeyword_2_1_1_1_4_1()); }
	'('
	{ after(grammarAccess.getEntityFeatureAccess().getLeftParenthesisKeyword_2_1_1_1_4_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_1_4__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_1_4__2__Impl
	rule__EntityFeature__Group_2_1_1_1_4__3
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_1_4__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getPropertiesAssignment_2_1_1_1_4_2()); }
	(rule__EntityFeature__PropertiesAssignment_2_1_1_1_4_2)
	{ after(grammarAccess.getEntityFeatureAccess().getPropertiesAssignment_2_1_1_1_4_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_1_4__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_1_4__3__Impl
	rule__EntityFeature__Group_2_1_1_1_4__4
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_1_4__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getGroup_2_1_1_1_4_3()); }
	(rule__EntityFeature__Group_2_1_1_1_4_3__0)*
	{ after(grammarAccess.getEntityFeatureAccess().getGroup_2_1_1_1_4_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_1_4__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_1_4__4__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_1_4__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getRightParenthesisKeyword_2_1_1_1_4_4()); }
	')'
	{ after(grammarAccess.getEntityFeatureAccess().getRightParenthesisKeyword_2_1_1_1_4_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EntityFeature__Group_2_1_1_1_4_3__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_1_4_3__0__Impl
	rule__EntityFeature__Group_2_1_1_1_4_3__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_1_4_3__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getCommaKeyword_2_1_1_1_4_3_0()); }
	','
	{ after(grammarAccess.getEntityFeatureAccess().getCommaKeyword_2_1_1_1_4_3_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_1_4_3__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_1_4_3__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_1_4_3__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getPropertiesAssignment_2_1_1_1_4_3_1()); }
	(rule__EntityFeature__PropertiesAssignment_2_1_1_1_4_3_1)
	{ after(grammarAccess.getEntityFeatureAccess().getPropertiesAssignment_2_1_1_1_4_3_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EntityFeature__Group_2_1_1_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_2__0__Impl
	rule__EntityFeature__Group_2_1_1_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getAlternatives_2_1_1_2_0()); }
	(rule__EntityFeature__Alternatives_2_1_1_2_0)
	{ after(grammarAccess.getEntityFeatureAccess().getAlternatives_2_1_1_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_2__1__Impl
	rule__EntityFeature__Group_2_1_1_2__2
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getUniqueEntryAssignment_2_1_1_2_1()); }
	(rule__EntityFeature__UniqueEntryAssignment_2_1_1_2_1)?
	{ after(grammarAccess.getEntityFeatureAccess().getUniqueEntryAssignment_2_1_1_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_2__2__Impl
	rule__EntityFeature__Group_2_1_1_2__3
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getAlternatives_2_1_1_2_2()); }
	(rule__EntityFeature__Alternatives_2_1_1_2_2)?
	{ after(grammarAccess.getEntityFeatureAccess().getAlternatives_2_1_1_2_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_2__3__Impl
	rule__EntityFeature__Group_2_1_1_2__4
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getTypeAssignment_2_1_1_2_3()); }
	(rule__EntityFeature__TypeAssignment_2_1_1_2_3)
	{ after(grammarAccess.getEntityFeatureAccess().getTypeAssignment_2_1_1_2_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_2__4__Impl
	rule__EntityFeature__Group_2_1_1_2__5
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getMultiplicityAssignment_2_1_1_2_4()); }
	(rule__EntityFeature__MultiplicityAssignment_2_1_1_2_4)?
	{ after(grammarAccess.getEntityFeatureAccess().getMultiplicityAssignment_2_1_1_2_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2__5
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_2__5__Impl
	rule__EntityFeature__Group_2_1_1_2__6
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2__5__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getGroup_2_1_1_2_5()); }
	(rule__EntityFeature__Group_2_1_1_2_5__0)?
	{ after(grammarAccess.getEntityFeatureAccess().getGroup_2_1_1_2_5()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2__6
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_2__6__Impl
	rule__EntityFeature__Group_2_1_1_2__7
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2__6__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getNameAssignment_2_1_1_2_6()); }
	(rule__EntityFeature__NameAssignment_2_1_1_2_6)
	{ after(grammarAccess.getEntityFeatureAccess().getNameAssignment_2_1_1_2_6()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2__7
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_2__7__Impl
	rule__EntityFeature__Group_2_1_1_2__8
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2__7__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getGroup_2_1_1_2_7()); }
	(rule__EntityFeature__Group_2_1_1_2_7__0)?
	{ after(grammarAccess.getEntityFeatureAccess().getGroup_2_1_1_2_7()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2__8
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_2__8__Impl
	rule__EntityFeature__Group_2_1_1_2__9
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2__8__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getAsKanbanStateAssignment_2_1_1_2_8()); }
	(rule__EntityFeature__AsKanbanStateAssignment_2_1_1_2_8)?
	{ after(grammarAccess.getEntityFeatureAccess().getAsKanbanStateAssignment_2_1_1_2_8()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2__9
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_2__9__Impl
	rule__EntityFeature__Group_2_1_1_2__10
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2__9__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getGroup_2_1_1_2_9()); }
	(rule__EntityFeature__Group_2_1_1_2_9__0)?
	{ after(grammarAccess.getEntityFeatureAccess().getGroup_2_1_1_2_9()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2__10
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_2__10__Impl
	rule__EntityFeature__Group_2_1_1_2__11
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2__10__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getPersistenceInfoAssignment_2_1_1_2_10()); }
	(rule__EntityFeature__PersistenceInfoAssignment_2_1_1_2_10)?
	{ after(grammarAccess.getEntityFeatureAccess().getPersistenceInfoAssignment_2_1_1_2_10()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2__11
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_2__11__Impl
	rule__EntityFeature__Group_2_1_1_2__12
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2__11__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getGroup_2_1_1_2_11()); }
	(rule__EntityFeature__Group_2_1_1_2_11__0)?
	{ after(grammarAccess.getEntityFeatureAccess().getGroup_2_1_1_2_11()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2__12
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_2__12__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2__12__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getGroup_2_1_1_2_12()); }
	(rule__EntityFeature__Group_2_1_1_2_12__0)?
	{ after(grammarAccess.getEntityFeatureAccess().getGroup_2_1_1_2_12()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EntityFeature__Group_2_1_1_2_5__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_2_5__0__Impl
	rule__EntityFeature__Group_2_1_1_2_5__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2_5__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getLeftSquareBracketKeyword_2_1_1_2_5_0()); }
	'['
	{ after(grammarAccess.getEntityFeatureAccess().getLeftSquareBracketKeyword_2_1_1_2_5_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2_5__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_2_5__1__Impl
	rule__EntityFeature__Group_2_1_1_2_5__2
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2_5__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getConstraintsAssignment_2_1_1_2_5_1()); }
	(rule__EntityFeature__ConstraintsAssignment_2_1_1_2_5_1)*
	{ after(grammarAccess.getEntityFeatureAccess().getConstraintsAssignment_2_1_1_2_5_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2_5__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_2_5__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2_5__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getRightSquareBracketKeyword_2_1_1_2_5_2()); }
	']'
	{ after(grammarAccess.getEntityFeatureAccess().getRightSquareBracketKeyword_2_1_1_2_5_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EntityFeature__Group_2_1_1_2_7__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_2_7__0__Impl
	rule__EntityFeature__Group_2_1_1_2_7__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2_7__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getOnKanbanCardAssignment_2_1_1_2_7_0()); }
	(rule__EntityFeature__OnKanbanCardAssignment_2_1_1_2_7_0)
	{ after(grammarAccess.getEntityFeatureAccess().getOnKanbanCardAssignment_2_1_1_2_7_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2_7__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_2_7__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2_7__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getOnKanbanCardStatesAssignment_2_1_1_2_7_1()); }
	(rule__EntityFeature__OnKanbanCardStatesAssignment_2_1_1_2_7_1)
	{ after(grammarAccess.getEntityFeatureAccess().getOnKanbanCardStatesAssignment_2_1_1_2_7_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EntityFeature__Group_2_1_1_2_9__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_2_9__0__Impl
	rule__EntityFeature__Group_2_1_1_2_9__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2_9__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getAsKanbanOrderingAssignment_2_1_1_2_9_0()); }
	(rule__EntityFeature__AsKanbanOrderingAssignment_2_1_1_2_9_0)
	{ after(grammarAccess.getEntityFeatureAccess().getAsKanbanOrderingAssignment_2_1_1_2_9_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2_9__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_2_9__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2_9__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getDecentKanbanOrderAssignment_2_1_1_2_9_1()); }
	(rule__EntityFeature__DecentKanbanOrderAssignment_2_1_1_2_9_1)?
	{ after(grammarAccess.getEntityFeatureAccess().getDecentKanbanOrderAssignment_2_1_1_2_9_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EntityFeature__Group_2_1_1_2_11__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_2_11__0__Impl
	rule__EntityFeature__Group_2_1_1_2_11__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2_11__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getOppositeKeyword_2_1_1_2_11_0()); }
	'opposite'
	{ after(grammarAccess.getEntityFeatureAccess().getOppositeKeyword_2_1_1_2_11_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2_11__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_2_11__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2_11__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getOppositeAssignment_2_1_1_2_11_1()); }
	(rule__EntityFeature__OppositeAssignment_2_1_1_2_11_1)
	{ after(grammarAccess.getEntityFeatureAccess().getOppositeAssignment_2_1_1_2_11_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EntityFeature__Group_2_1_1_2_12__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_2_12__0__Impl
	rule__EntityFeature__Group_2_1_1_2_12__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2_12__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getPropertiesKeyword_2_1_1_2_12_0()); }
	'properties'
	{ after(grammarAccess.getEntityFeatureAccess().getPropertiesKeyword_2_1_1_2_12_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2_12__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_2_12__1__Impl
	rule__EntityFeature__Group_2_1_1_2_12__2
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2_12__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getLeftParenthesisKeyword_2_1_1_2_12_1()); }
	'('
	{ after(grammarAccess.getEntityFeatureAccess().getLeftParenthesisKeyword_2_1_1_2_12_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2_12__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_2_12__2__Impl
	rule__EntityFeature__Group_2_1_1_2_12__3
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2_12__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getPropertiesAssignment_2_1_1_2_12_2()); }
	(rule__EntityFeature__PropertiesAssignment_2_1_1_2_12_2)
	{ after(grammarAccess.getEntityFeatureAccess().getPropertiesAssignment_2_1_1_2_12_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2_12__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_2_12__3__Impl
	rule__EntityFeature__Group_2_1_1_2_12__4
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2_12__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getGroup_2_1_1_2_12_3()); }
	(rule__EntityFeature__Group_2_1_1_2_12_3__0)*
	{ after(grammarAccess.getEntityFeatureAccess().getGroup_2_1_1_2_12_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2_12__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_2_12__4__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2_12__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getRightParenthesisKeyword_2_1_1_2_12_4()); }
	')'
	{ after(grammarAccess.getEntityFeatureAccess().getRightParenthesisKeyword_2_1_1_2_12_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EntityFeature__Group_2_1_1_2_12_3__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_2_12_3__0__Impl
	rule__EntityFeature__Group_2_1_1_2_12_3__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2_12_3__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getCommaKeyword_2_1_1_2_12_3_0()); }
	','
	{ after(grammarAccess.getEntityFeatureAccess().getCommaKeyword_2_1_1_2_12_3_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2_12_3__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_1_1_2_12_3__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_1_1_2_12_3__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getPropertiesAssignment_2_1_1_2_12_3_1()); }
	(rule__EntityFeature__PropertiesAssignment_2_1_1_2_12_3_1)
	{ after(grammarAccess.getEntityFeatureAccess().getPropertiesAssignment_2_1_1_2_12_3_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EntityFeature__Group_2_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_2__0__Impl
	rule__EntityFeature__Group_2_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getLOperationAnnotationInfoAction_2_2_0()); }
	()
	{ after(grammarAccess.getEntityFeatureAccess().getLOperationAnnotationInfoAction_2_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_2__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getGroup_2_2_1()); }
	(rule__EntityFeature__Group_2_2_1__0)
	{ after(grammarAccess.getEntityFeatureAccess().getGroup_2_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EntityFeature__Group_2_2_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_2_1__0__Impl
	rule__EntityFeature__Group_2_2_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_2_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getDefKeyword_2_2_1_0()); }
	'def'
	{ after(grammarAccess.getEntityFeatureAccess().getDefKeyword_2_2_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_2_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_2_1__1__Impl
	rule__EntityFeature__Group_2_2_1__2
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_2_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getTypeAssignment_2_2_1_1()); }
	(rule__EntityFeature__TypeAssignment_2_2_1_1)
	{ after(grammarAccess.getEntityFeatureAccess().getTypeAssignment_2_2_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_2_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_2_1__2__Impl
	rule__EntityFeature__Group_2_2_1__3
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_2_1__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getNameAssignment_2_2_1_2()); }
	(rule__EntityFeature__NameAssignment_2_2_1_2)
	{ after(grammarAccess.getEntityFeatureAccess().getNameAssignment_2_2_1_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_2_1__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_2_1__3__Impl
	rule__EntityFeature__Group_2_2_1__4
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_2_1__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getLeftParenthesisKeyword_2_2_1_3()); }
	'('
	{ after(grammarAccess.getEntityFeatureAccess().getLeftParenthesisKeyword_2_2_1_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_2_1__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_2_1__4__Impl
	rule__EntityFeature__Group_2_2_1__5
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_2_1__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getGroup_2_2_1_4()); }
	(rule__EntityFeature__Group_2_2_1_4__0)?
	{ after(grammarAccess.getEntityFeatureAccess().getGroup_2_2_1_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_2_1__5
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_2_1__5__Impl
	rule__EntityFeature__Group_2_2_1__6
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_2_1__5__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getRightParenthesisKeyword_2_2_1_5()); }
	')'
	{ after(grammarAccess.getEntityFeatureAccess().getRightParenthesisKeyword_2_2_1_5()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_2_1__6
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_2_1__6__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_2_1__6__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getBodyAssignment_2_2_1_6()); }
	(rule__EntityFeature__BodyAssignment_2_2_1_6)
	{ after(grammarAccess.getEntityFeatureAccess().getBodyAssignment_2_2_1_6()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EntityFeature__Group_2_2_1_4__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_2_1_4__0__Impl
	rule__EntityFeature__Group_2_2_1_4__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_2_1_4__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getParamsAssignment_2_2_1_4_0()); }
	(rule__EntityFeature__ParamsAssignment_2_2_1_4_0)
	{ after(grammarAccess.getEntityFeatureAccess().getParamsAssignment_2_2_1_4_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_2_1_4__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_2_1_4__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_2_1_4__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getGroup_2_2_1_4_1()); }
	(rule__EntityFeature__Group_2_2_1_4_1__0)*
	{ after(grammarAccess.getEntityFeatureAccess().getGroup_2_2_1_4_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EntityFeature__Group_2_2_1_4_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_2_1_4_1__0__Impl
	rule__EntityFeature__Group_2_2_1_4_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_2_1_4_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getCommaKeyword_2_2_1_4_1_0()); }
	','
	{ after(grammarAccess.getEntityFeatureAccess().getCommaKeyword_2_2_1_4_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_2_1_4_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeature__Group_2_2_1_4_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__Group_2_2_1_4_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeatureAccess().getParamsAssignment_2_2_1_4_1_1()); }
	(rule__EntityFeature__ParamsAssignment_2_2_1_4_1_1)
	{ after(grammarAccess.getEntityFeatureAccess().getParamsAssignment_2_2_1_4_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__KanbanStateDetail__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__KanbanStateDetail__Group__0__Impl
	rule__KanbanStateDetail__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__KanbanStateDetail__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getKanbanStateDetailAccess().getLKanbanStateDetailAction_0()); }
	()
	{ after(grammarAccess.getKanbanStateDetailAccess().getLKanbanStateDetailAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__KanbanStateDetail__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__KanbanStateDetail__Group__1__Impl
	rule__KanbanStateDetail__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__KanbanStateDetail__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getKanbanStateDetailAccess().getStatesKeyword_1()); }
	'states'
	{ after(grammarAccess.getKanbanStateDetailAccess().getStatesKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__KanbanStateDetail__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__KanbanStateDetail__Group__2__Impl
	rule__KanbanStateDetail__Group__3
;
finally {
	restoreStackSize(stackSize);
}

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

rule__KanbanStateDetail__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__KanbanStateDetail__Group__3__Impl
	rule__KanbanStateDetail__Group__4
;
finally {
	restoreStackSize(stackSize);
}

rule__KanbanStateDetail__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getKanbanStateDetailAccess().getGroup_3()); }
	(rule__KanbanStateDetail__Group_3__0)?
	{ after(grammarAccess.getKanbanStateDetailAccess().getGroup_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__KanbanStateDetail__Group__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__KanbanStateDetail__Group__4__Impl
;
finally {
	restoreStackSize(stackSize);
}

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


rule__KanbanStateDetail__Group_3__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__KanbanStateDetail__Group_3__0__Impl
	rule__KanbanStateDetail__Group_3__1
;
finally {
	restoreStackSize(stackSize);
}

rule__KanbanStateDetail__Group_3__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getKanbanStateDetailAccess().getInfosAssignment_3_0()); }
	(rule__KanbanStateDetail__InfosAssignment_3_0)
	{ after(grammarAccess.getKanbanStateDetailAccess().getInfosAssignment_3_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__KanbanStateDetail__Group_3__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__KanbanStateDetail__Group_3__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__KanbanStateDetail__Group_3__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getKanbanStateDetailAccess().getGroup_3_1()); }
	(rule__KanbanStateDetail__Group_3_1__0)*
	{ after(grammarAccess.getKanbanStateDetailAccess().getGroup_3_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__KanbanStateDetail__Group_3_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__KanbanStateDetail__Group_3_1__0__Impl
	rule__KanbanStateDetail__Group_3_1__1
;
finally {
	restoreStackSize(stackSize);
}

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

rule__KanbanStateDetail__Group_3_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__KanbanStateDetail__Group_3_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__KanbanStateDetail__Group_3_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getKanbanStateDetailAccess().getInfosAssignment_3_1_1()); }
	(rule__KanbanStateDetail__InfosAssignment_3_1_1)
	{ after(grammarAccess.getKanbanStateDetailAccess().getInfosAssignment_3_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__KanbanEnumInfo__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__KanbanEnumInfo__Group__0__Impl
	rule__KanbanEnumInfo__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__KanbanEnumInfo__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getKanbanEnumInfoAccess().getLiteralAssignment_0()); }
	(rule__KanbanEnumInfo__LiteralAssignment_0)
	{ after(grammarAccess.getKanbanEnumInfoAccess().getLiteralAssignment_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__KanbanEnumInfo__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__KanbanEnumInfo__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__KanbanEnumInfo__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getKanbanEnumInfoAccess().getGroup_1()); }
	(rule__KanbanEnumInfo__Group_1__0)?
	{ after(grammarAccess.getKanbanEnumInfoAccess().getGroup_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__KanbanEnumInfo__Group_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__KanbanEnumInfo__Group_1__0__Impl
	rule__KanbanEnumInfo__Group_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__KanbanEnumInfo__Group_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getKanbanEnumInfoAccess().getEqualsSignKeyword_1_0()); }
	'='
	{ after(grammarAccess.getKanbanEnumInfoAccess().getEqualsSignKeyword_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__KanbanEnumInfo__Group_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__KanbanEnumInfo__Group_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__KanbanEnumInfo__Group_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getKanbanEnumInfoAccess().getI18nKeyAssignment_1_1()); }
	(rule__KanbanEnumInfo__I18nKeyAssignment_1_1)
	{ after(grammarAccess.getKanbanEnumInfoAccess().getI18nKeyAssignment_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__BeanFeature__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group__0__Impl
	rule__BeanFeature__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getLBeanFeatureAction_0()); }
	()
	{ after(grammarAccess.getBeanFeatureAccess().getLBeanFeatureAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group__1__Impl
	rule__BeanFeature__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getAnnotationsAssignment_1()); }
	(rule__BeanFeature__AnnotationsAssignment_1)*
	{ after(grammarAccess.getBeanFeatureAccess().getAnnotationsAssignment_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getAlternatives_2()); }
	(rule__BeanFeature__Alternatives_2)
	{ after(grammarAccess.getBeanFeatureAccess().getAlternatives_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__BeanFeature__Group_2_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_0__0__Impl
	rule__BeanFeature__Group_2_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getLBeanReferenceAnnotationInfoAction_2_0_0()); }
	()
	{ after(grammarAccess.getBeanFeatureAccess().getLBeanReferenceAnnotationInfoAction_2_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_0__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getGroup_2_0_1()); }
	(rule__BeanFeature__Group_2_0_1__0)
	{ after(grammarAccess.getBeanFeatureAccess().getGroup_2_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__BeanFeature__Group_2_0_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_0_1__0__Impl
	rule__BeanFeature__Group_2_0_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getRefKeyword_2_0_1_0()); }
	'ref'
	{ after(grammarAccess.getBeanFeatureAccess().getRefKeyword_2_0_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_0_1__1__Impl
	rule__BeanFeature__Group_2_0_1__2
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getCascadingAssignment_2_0_1_1()); }
	(rule__BeanFeature__CascadingAssignment_2_0_1_1)?
	{ after(grammarAccess.getBeanFeatureAccess().getCascadingAssignment_2_0_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_0_1__2__Impl
	rule__BeanFeature__Group_2_0_1__3
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getTypeAssignment_2_0_1_2()); }
	(rule__BeanFeature__TypeAssignment_2_0_1_2)
	{ after(grammarAccess.getBeanFeatureAccess().getTypeAssignment_2_0_1_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_0_1__3__Impl
	rule__BeanFeature__Group_2_0_1__4
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getMultiplicityAssignment_2_0_1_3()); }
	(rule__BeanFeature__MultiplicityAssignment_2_0_1_3)?
	{ after(grammarAccess.getBeanFeatureAccess().getMultiplicityAssignment_2_0_1_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_0_1__4__Impl
	rule__BeanFeature__Group_2_0_1__5
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getGroup_2_0_1_4()); }
	(rule__BeanFeature__Group_2_0_1_4__0)?
	{ after(grammarAccess.getBeanFeatureAccess().getGroup_2_0_1_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1__5
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_0_1__5__Impl
	rule__BeanFeature__Group_2_0_1__6
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1__5__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getNameAssignment_2_0_1_5()); }
	(rule__BeanFeature__NameAssignment_2_0_1_5)
	{ after(grammarAccess.getBeanFeatureAccess().getNameAssignment_2_0_1_5()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1__6
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_0_1__6__Impl
	rule__BeanFeature__Group_2_0_1__7
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1__6__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getGroup_2_0_1_6()); }
	(rule__BeanFeature__Group_2_0_1_6__0)?
	{ after(grammarAccess.getBeanFeatureAccess().getGroup_2_0_1_6()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1__7
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_0_1__7__Impl
	rule__BeanFeature__Group_2_0_1__8
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1__7__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getGroup_2_0_1_7()); }
	(rule__BeanFeature__Group_2_0_1_7__0)?
	{ after(grammarAccess.getBeanFeatureAccess().getGroup_2_0_1_7()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1__8
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_0_1__8__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1__8__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getResultFiltersAssignment_2_0_1_8()); }
	(rule__BeanFeature__ResultFiltersAssignment_2_0_1_8)?
	{ after(grammarAccess.getBeanFeatureAccess().getResultFiltersAssignment_2_0_1_8()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__BeanFeature__Group_2_0_1_4__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_0_1_4__0__Impl
	rule__BeanFeature__Group_2_0_1_4__1
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1_4__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getLeftSquareBracketKeyword_2_0_1_4_0()); }
	'['
	{ after(grammarAccess.getBeanFeatureAccess().getLeftSquareBracketKeyword_2_0_1_4_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1_4__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_0_1_4__1__Impl
	rule__BeanFeature__Group_2_0_1_4__2
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1_4__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getConstraintsAssignment_2_0_1_4_1()); }
	(rule__BeanFeature__ConstraintsAssignment_2_0_1_4_1)*
	{ after(grammarAccess.getBeanFeatureAccess().getConstraintsAssignment_2_0_1_4_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1_4__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_0_1_4__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1_4__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getRightSquareBracketKeyword_2_0_1_4_2()); }
	']'
	{ after(grammarAccess.getBeanFeatureAccess().getRightSquareBracketKeyword_2_0_1_4_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__BeanFeature__Group_2_0_1_6__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_0_1_6__0__Impl
	rule__BeanFeature__Group_2_0_1_6__1
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1_6__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getOppositeKeyword_2_0_1_6_0()); }
	'opposite'
	{ after(grammarAccess.getBeanFeatureAccess().getOppositeKeyword_2_0_1_6_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1_6__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_0_1_6__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1_6__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getOppositeAssignment_2_0_1_6_1()); }
	(rule__BeanFeature__OppositeAssignment_2_0_1_6_1)
	{ after(grammarAccess.getBeanFeatureAccess().getOppositeAssignment_2_0_1_6_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__BeanFeature__Group_2_0_1_7__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_0_1_7__0__Impl
	rule__BeanFeature__Group_2_0_1_7__1
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1_7__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getPropertiesKeyword_2_0_1_7_0()); }
	'properties'
	{ after(grammarAccess.getBeanFeatureAccess().getPropertiesKeyword_2_0_1_7_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1_7__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_0_1_7__1__Impl
	rule__BeanFeature__Group_2_0_1_7__2
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1_7__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getLeftParenthesisKeyword_2_0_1_7_1()); }
	'('
	{ after(grammarAccess.getBeanFeatureAccess().getLeftParenthesisKeyword_2_0_1_7_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1_7__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_0_1_7__2__Impl
	rule__BeanFeature__Group_2_0_1_7__3
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1_7__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getPropertiesAssignment_2_0_1_7_2()); }
	(rule__BeanFeature__PropertiesAssignment_2_0_1_7_2)
	{ after(grammarAccess.getBeanFeatureAccess().getPropertiesAssignment_2_0_1_7_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1_7__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_0_1_7__3__Impl
	rule__BeanFeature__Group_2_0_1_7__4
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1_7__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getGroup_2_0_1_7_3()); }
	(rule__BeanFeature__Group_2_0_1_7_3__0)*
	{ after(grammarAccess.getBeanFeatureAccess().getGroup_2_0_1_7_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1_7__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_0_1_7__4__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1_7__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getRightParenthesisKeyword_2_0_1_7_4()); }
	')'
	{ after(grammarAccess.getBeanFeatureAccess().getRightParenthesisKeyword_2_0_1_7_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__BeanFeature__Group_2_0_1_7_3__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_0_1_7_3__0__Impl
	rule__BeanFeature__Group_2_0_1_7_3__1
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1_7_3__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getCommaKeyword_2_0_1_7_3_0()); }
	','
	{ after(grammarAccess.getBeanFeatureAccess().getCommaKeyword_2_0_1_7_3_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1_7_3__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_0_1_7_3__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_0_1_7_3__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getPropertiesAssignment_2_0_1_7_3_1()); }
	(rule__BeanFeature__PropertiesAssignment_2_0_1_7_3_1)
	{ after(grammarAccess.getBeanFeatureAccess().getPropertiesAssignment_2_0_1_7_3_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__BeanFeature__Group_2_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_1__0__Impl
	rule__BeanFeature__Group_2_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getLBeanAttributeAnnotationInfoAction_2_1_0()); }
	()
	{ after(grammarAccess.getBeanFeatureAccess().getLBeanAttributeAnnotationInfoAction_2_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getAlternatives_2_1_1()); }
	(rule__BeanFeature__Alternatives_2_1_1)
	{ after(grammarAccess.getBeanFeatureAccess().getAlternatives_2_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__BeanFeature__Group_2_1_1_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_1_1_0__0__Impl
	rule__BeanFeature__Group_2_1_1_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getTransientAssignment_2_1_1_0_0()); }
	(rule__BeanFeature__TransientAssignment_2_1_1_0_0)
	{ after(grammarAccess.getBeanFeatureAccess().getTransientAssignment_2_1_1_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_1_1_0__1__Impl
	rule__BeanFeature__Group_2_1_1_0__2
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getTypeAssignment_2_1_1_0_1()); }
	(rule__BeanFeature__TypeAssignment_2_1_1_0_1)
	{ after(grammarAccess.getBeanFeatureAccess().getTypeAssignment_2_1_1_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_0__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_1_1_0__2__Impl
	rule__BeanFeature__Group_2_1_1_0__3
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_0__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getGroup_2_1_1_0_2()); }
	(rule__BeanFeature__Group_2_1_1_0_2__0)?
	{ after(grammarAccess.getBeanFeatureAccess().getGroup_2_1_1_0_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_0__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_1_1_0__3__Impl
	rule__BeanFeature__Group_2_1_1_0__4
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_0__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getNameAssignment_2_1_1_0_3()); }
	(rule__BeanFeature__NameAssignment_2_1_1_0_3)
	{ after(grammarAccess.getBeanFeatureAccess().getNameAssignment_2_1_1_0_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_0__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_1_1_0__4__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_0__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getGroup_2_1_1_0_4()); }
	(rule__BeanFeature__Group_2_1_1_0_4__0)?
	{ after(grammarAccess.getBeanFeatureAccess().getGroup_2_1_1_0_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__BeanFeature__Group_2_1_1_0_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_1_1_0_2__0__Impl
	rule__BeanFeature__Group_2_1_1_0_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_0_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getLeftSquareBracketKeyword_2_1_1_0_2_0()); }
	'['
	{ after(grammarAccess.getBeanFeatureAccess().getLeftSquareBracketKeyword_2_1_1_0_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_0_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_1_1_0_2__1__Impl
	rule__BeanFeature__Group_2_1_1_0_2__2
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_0_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getConstraintsAssignment_2_1_1_0_2_1()); }
	(rule__BeanFeature__ConstraintsAssignment_2_1_1_0_2_1)*
	{ after(grammarAccess.getBeanFeatureAccess().getConstraintsAssignment_2_1_1_0_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_0_2__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_1_1_0_2__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_0_2__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getRightSquareBracketKeyword_2_1_1_0_2_2()); }
	']'
	{ after(grammarAccess.getBeanFeatureAccess().getRightSquareBracketKeyword_2_1_1_0_2_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__BeanFeature__Group_2_1_1_0_4__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_1_1_0_4__0__Impl
	rule__BeanFeature__Group_2_1_1_0_4__1
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_0_4__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getPropertiesKeyword_2_1_1_0_4_0()); }
	'properties'
	{ after(grammarAccess.getBeanFeatureAccess().getPropertiesKeyword_2_1_1_0_4_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_0_4__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_1_1_0_4__1__Impl
	rule__BeanFeature__Group_2_1_1_0_4__2
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_0_4__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getLeftParenthesisKeyword_2_1_1_0_4_1()); }
	'('
	{ after(grammarAccess.getBeanFeatureAccess().getLeftParenthesisKeyword_2_1_1_0_4_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_0_4__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_1_1_0_4__2__Impl
	rule__BeanFeature__Group_2_1_1_0_4__3
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_0_4__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getPropertiesAssignment_2_1_1_0_4_2()); }
	(rule__BeanFeature__PropertiesAssignment_2_1_1_0_4_2)
	{ after(grammarAccess.getBeanFeatureAccess().getPropertiesAssignment_2_1_1_0_4_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_0_4__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_1_1_0_4__3__Impl
	rule__BeanFeature__Group_2_1_1_0_4__4
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_0_4__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getGroup_2_1_1_0_4_3()); }
	(rule__BeanFeature__Group_2_1_1_0_4_3__0)*
	{ after(grammarAccess.getBeanFeatureAccess().getGroup_2_1_1_0_4_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_0_4__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_1_1_0_4__4__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_0_4__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getRightParenthesisKeyword_2_1_1_0_4_4()); }
	')'
	{ after(grammarAccess.getBeanFeatureAccess().getRightParenthesisKeyword_2_1_1_0_4_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__BeanFeature__Group_2_1_1_0_4_3__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_1_1_0_4_3__0__Impl
	rule__BeanFeature__Group_2_1_1_0_4_3__1
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_0_4_3__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getCommaKeyword_2_1_1_0_4_3_0()); }
	','
	{ after(grammarAccess.getBeanFeatureAccess().getCommaKeyword_2_1_1_0_4_3_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_0_4_3__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_1_1_0_4_3__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_0_4_3__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getPropertiesAssignment_2_1_1_0_4_3_1()); }
	(rule__BeanFeature__PropertiesAssignment_2_1_1_0_4_3_1)
	{ after(grammarAccess.getBeanFeatureAccess().getPropertiesAssignment_2_1_1_0_4_3_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__BeanFeature__Group_2_1_1_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_1_1_1__0__Impl
	rule__BeanFeature__Group_2_1_1_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getAlternatives_2_1_1_1_0()); }
	(rule__BeanFeature__Alternatives_2_1_1_1_0)
	{ after(grammarAccess.getBeanFeatureAccess().getAlternatives_2_1_1_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_1_1_1__1__Impl
	rule__BeanFeature__Group_2_1_1_1__2
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getAlternatives_2_1_1_1_1()); }
	(rule__BeanFeature__Alternatives_2_1_1_1_1)?
	{ after(grammarAccess.getBeanFeatureAccess().getAlternatives_2_1_1_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_1_1_1__2__Impl
	rule__BeanFeature__Group_2_1_1_1__3
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_1__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getTypeAssignment_2_1_1_1_2()); }
	(rule__BeanFeature__TypeAssignment_2_1_1_1_2)
	{ after(grammarAccess.getBeanFeatureAccess().getTypeAssignment_2_1_1_1_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_1__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_1_1_1__3__Impl
	rule__BeanFeature__Group_2_1_1_1__4
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_1__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getMultiplicityAssignment_2_1_1_1_3()); }
	(rule__BeanFeature__MultiplicityAssignment_2_1_1_1_3)?
	{ after(grammarAccess.getBeanFeatureAccess().getMultiplicityAssignment_2_1_1_1_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_1__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_1_1_1__4__Impl
	rule__BeanFeature__Group_2_1_1_1__5
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_1__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getGroup_2_1_1_1_4()); }
	(rule__BeanFeature__Group_2_1_1_1_4__0)?
	{ after(grammarAccess.getBeanFeatureAccess().getGroup_2_1_1_1_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_1__5
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_1_1_1__5__Impl
	rule__BeanFeature__Group_2_1_1_1__6
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_1__5__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getNameAssignment_2_1_1_1_5()); }
	(rule__BeanFeature__NameAssignment_2_1_1_1_5)
	{ after(grammarAccess.getBeanFeatureAccess().getNameAssignment_2_1_1_1_5()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_1__6
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_1_1_1__6__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_1__6__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getGroup_2_1_1_1_6()); }
	(rule__BeanFeature__Group_2_1_1_1_6__0)?
	{ after(grammarAccess.getBeanFeatureAccess().getGroup_2_1_1_1_6()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__BeanFeature__Group_2_1_1_1_4__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_1_1_1_4__0__Impl
	rule__BeanFeature__Group_2_1_1_1_4__1
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_1_4__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getLeftSquareBracketKeyword_2_1_1_1_4_0()); }
	'['
	{ after(grammarAccess.getBeanFeatureAccess().getLeftSquareBracketKeyword_2_1_1_1_4_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_1_4__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_1_1_1_4__1__Impl
	rule__BeanFeature__Group_2_1_1_1_4__2
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_1_4__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getConstraintsAssignment_2_1_1_1_4_1()); }
	(rule__BeanFeature__ConstraintsAssignment_2_1_1_1_4_1)*
	{ after(grammarAccess.getBeanFeatureAccess().getConstraintsAssignment_2_1_1_1_4_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_1_4__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_1_1_1_4__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_1_4__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getRightSquareBracketKeyword_2_1_1_1_4_2()); }
	']'
	{ after(grammarAccess.getBeanFeatureAccess().getRightSquareBracketKeyword_2_1_1_1_4_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__BeanFeature__Group_2_1_1_1_6__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_1_1_1_6__0__Impl
	rule__BeanFeature__Group_2_1_1_1_6__1
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_1_6__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getPropertiesKeyword_2_1_1_1_6_0()); }
	'properties'
	{ after(grammarAccess.getBeanFeatureAccess().getPropertiesKeyword_2_1_1_1_6_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_1_6__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_1_1_1_6__1__Impl
	rule__BeanFeature__Group_2_1_1_1_6__2
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_1_6__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getLeftParenthesisKeyword_2_1_1_1_6_1()); }
	'('
	{ after(grammarAccess.getBeanFeatureAccess().getLeftParenthesisKeyword_2_1_1_1_6_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_1_6__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_1_1_1_6__2__Impl
	rule__BeanFeature__Group_2_1_1_1_6__3
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_1_6__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getPropertiesAssignment_2_1_1_1_6_2()); }
	(rule__BeanFeature__PropertiesAssignment_2_1_1_1_6_2)
	{ after(grammarAccess.getBeanFeatureAccess().getPropertiesAssignment_2_1_1_1_6_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_1_6__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_1_1_1_6__3__Impl
	rule__BeanFeature__Group_2_1_1_1_6__4
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_1_6__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getGroup_2_1_1_1_6_3()); }
	(rule__BeanFeature__Group_2_1_1_1_6_3__0)*
	{ after(grammarAccess.getBeanFeatureAccess().getGroup_2_1_1_1_6_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_1_6__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_1_1_1_6__4__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_1_6__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getRightParenthesisKeyword_2_1_1_1_6_4()); }
	')'
	{ after(grammarAccess.getBeanFeatureAccess().getRightParenthesisKeyword_2_1_1_1_6_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__BeanFeature__Group_2_1_1_1_6_3__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_1_1_1_6_3__0__Impl
	rule__BeanFeature__Group_2_1_1_1_6_3__1
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_1_6_3__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getCommaKeyword_2_1_1_1_6_3_0()); }
	','
	{ after(grammarAccess.getBeanFeatureAccess().getCommaKeyword_2_1_1_1_6_3_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_1_6_3__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_1_1_1_6_3__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_1_1_1_6_3__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getPropertiesAssignment_2_1_1_1_6_3_1()); }
	(rule__BeanFeature__PropertiesAssignment_2_1_1_1_6_3_1)
	{ after(grammarAccess.getBeanFeatureAccess().getPropertiesAssignment_2_1_1_1_6_3_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__BeanFeature__Group_2_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_2__0__Impl
	rule__BeanFeature__Group_2_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getLOperationAnnotationInfoAction_2_2_0()); }
	()
	{ after(grammarAccess.getBeanFeatureAccess().getLOperationAnnotationInfoAction_2_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_2__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getGroup_2_2_1()); }
	(rule__BeanFeature__Group_2_2_1__0)
	{ after(grammarAccess.getBeanFeatureAccess().getGroup_2_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__BeanFeature__Group_2_2_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_2_1__0__Impl
	rule__BeanFeature__Group_2_2_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_2_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getDefKeyword_2_2_1_0()); }
	'def'
	{ after(grammarAccess.getBeanFeatureAccess().getDefKeyword_2_2_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_2_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_2_1__1__Impl
	rule__BeanFeature__Group_2_2_1__2
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_2_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getTypeAssignment_2_2_1_1()); }
	(rule__BeanFeature__TypeAssignment_2_2_1_1)
	{ after(grammarAccess.getBeanFeatureAccess().getTypeAssignment_2_2_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_2_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_2_1__2__Impl
	rule__BeanFeature__Group_2_2_1__3
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_2_1__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getNameAssignment_2_2_1_2()); }
	(rule__BeanFeature__NameAssignment_2_2_1_2)
	{ after(grammarAccess.getBeanFeatureAccess().getNameAssignment_2_2_1_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_2_1__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_2_1__3__Impl
	rule__BeanFeature__Group_2_2_1__4
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_2_1__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getLeftParenthesisKeyword_2_2_1_3()); }
	'('
	{ after(grammarAccess.getBeanFeatureAccess().getLeftParenthesisKeyword_2_2_1_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_2_1__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_2_1__4__Impl
	rule__BeanFeature__Group_2_2_1__5
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_2_1__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getGroup_2_2_1_4()); }
	(rule__BeanFeature__Group_2_2_1_4__0)?
	{ after(grammarAccess.getBeanFeatureAccess().getGroup_2_2_1_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_2_1__5
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_2_1__5__Impl
	rule__BeanFeature__Group_2_2_1__6
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_2_1__5__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getRightParenthesisKeyword_2_2_1_5()); }
	')'
	{ after(grammarAccess.getBeanFeatureAccess().getRightParenthesisKeyword_2_2_1_5()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_2_1__6
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_2_1__6__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_2_1__6__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getBodyAssignment_2_2_1_6()); }
	(rule__BeanFeature__BodyAssignment_2_2_1_6)
	{ after(grammarAccess.getBeanFeatureAccess().getBodyAssignment_2_2_1_6()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__BeanFeature__Group_2_2_1_4__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_2_1_4__0__Impl
	rule__BeanFeature__Group_2_2_1_4__1
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_2_1_4__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getParamsAssignment_2_2_1_4_0()); }
	(rule__BeanFeature__ParamsAssignment_2_2_1_4_0)
	{ after(grammarAccess.getBeanFeatureAccess().getParamsAssignment_2_2_1_4_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_2_1_4__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_2_1_4__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_2_1_4__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getGroup_2_2_1_4_1()); }
	(rule__BeanFeature__Group_2_2_1_4_1__0)*
	{ after(grammarAccess.getBeanFeatureAccess().getGroup_2_2_1_4_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__BeanFeature__Group_2_2_1_4_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_2_1_4_1__0__Impl
	rule__BeanFeature__Group_2_2_1_4_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_2_1_4_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getCommaKeyword_2_2_1_4_1_0()); }
	','
	{ after(grammarAccess.getBeanFeatureAccess().getCommaKeyword_2_2_1_4_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_2_1_4_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__BeanFeature__Group_2_2_1_4_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__Group_2_2_1_4_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getBeanFeatureAccess().getParamsAssignment_2_2_1_4_1_1()); }
	(rule__BeanFeature__ParamsAssignment_2_2_1_4_1_1)
	{ after(grammarAccess.getBeanFeatureAccess().getParamsAssignment_2_2_1_4_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EntitySuperIndex__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntitySuperIndex__Group__0__Impl
	rule__EntitySuperIndex__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EntitySuperIndex__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntitySuperIndexAccess().getSuperIndexKeyword_0()); }
	'superIndex'
	{ after(grammarAccess.getEntitySuperIndexAccess().getSuperIndexKeyword_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntitySuperIndex__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntitySuperIndex__Group__1__Impl
	rule__EntitySuperIndex__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__EntitySuperIndex__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntitySuperIndexAccess().getNameAssignment_1()); }
	(rule__EntitySuperIndex__NameAssignment_1)
	{ after(grammarAccess.getEntitySuperIndexAccess().getNameAssignment_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntitySuperIndex__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntitySuperIndex__Group__2__Impl
	rule__EntitySuperIndex__Group__3
;
finally {
	restoreStackSize(stackSize);
}

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

rule__EntitySuperIndex__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntitySuperIndex__Group__3__Impl
	rule__EntitySuperIndex__Group__4
;
finally {
	restoreStackSize(stackSize);
}

rule__EntitySuperIndex__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntitySuperIndexAccess().getAttributesAssignment_3()); }
	(rule__EntitySuperIndex__AttributesAssignment_3)*
	{ after(grammarAccess.getEntitySuperIndexAccess().getAttributesAssignment_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntitySuperIndex__Group__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntitySuperIndex__Group__4__Impl
;
finally {
	restoreStackSize(stackSize);
}

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


rule__EntitySuperIndexAttribute__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntitySuperIndexAttribute__Group__0__Impl
	rule__EntitySuperIndexAttribute__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EntitySuperIndexAttribute__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntitySuperIndexAttributeAccess().getRefKeyword_0()); }
	'ref'
	{ after(grammarAccess.getEntitySuperIndexAttributeAccess().getRefKeyword_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntitySuperIndexAttribute__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntitySuperIndexAttribute__Group__1__Impl
	rule__EntitySuperIndexAttribute__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__EntitySuperIndexAttribute__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntitySuperIndexAttributeAccess().getFeatureAssignment_1()); }
	(rule__EntitySuperIndexAttribute__FeatureAssignment_1)
	{ after(grammarAccess.getEntitySuperIndexAttributeAccess().getFeatureAssignment_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntitySuperIndexAttribute__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntitySuperIndexAttribute__Group__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EntitySuperIndexAttribute__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntitySuperIndexAttributeAccess().getTailAssignment_2()); }
	(rule__EntitySuperIndexAttribute__TailAssignment_2)?
	{ after(grammarAccess.getEntitySuperIndexAttributeAccess().getTailAssignment_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EntityFeaturePathSegment__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeaturePathSegment__Group__0__Impl
	rule__EntityFeaturePathSegment__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeaturePathSegment__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeaturePathSegmentAccess().getLNestedFeatureAction_0()); }
	()
	{ after(grammarAccess.getEntityFeaturePathSegmentAccess().getLNestedFeatureAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeaturePathSegment__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeaturePathSegment__Group__1__Impl
	rule__EntityFeaturePathSegment__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeaturePathSegment__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeaturePathSegmentAccess().getFullStopKeyword_1()); }
	'.'
	{ after(grammarAccess.getEntityFeaturePathSegmentAccess().getFullStopKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeaturePathSegment__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeaturePathSegment__Group__2__Impl
	rule__EntityFeaturePathSegment__Group__3
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeaturePathSegment__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeaturePathSegmentAccess().getFeatureAssignment_2()); }
	(rule__EntityFeaturePathSegment__FeatureAssignment_2)
	{ after(grammarAccess.getEntityFeaturePathSegmentAccess().getFeatureAssignment_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeaturePathSegment__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityFeaturePathSegment__Group__3__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeaturePathSegment__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEntityFeaturePathSegmentAccess().getTailAssignment_3()); }
	(rule__EntityFeaturePathSegment__TailAssignment_3)?
	{ after(grammarAccess.getEntityFeaturePathSegmentAccess().getTailAssignment_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__TablePerClassStrategy__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__TablePerClassStrategy__Group__0__Impl
	rule__TablePerClassStrategy__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerClassStrategy__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getTablePerClassStrategyAccess().getLTablePerClassStrategyAction_0()); }
	()
	{ after(grammarAccess.getTablePerClassStrategyAccess().getLTablePerClassStrategyAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerClassStrategy__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__TablePerClassStrategy__Group__1__Impl
	rule__TablePerClassStrategy__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerClassStrategy__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getTablePerClassStrategyAccess().getInheritancePerClassKeyword_1()); }
	'inheritancePerClass'
	{ after(grammarAccess.getTablePerClassStrategyAccess().getInheritancePerClassKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerClassStrategy__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__TablePerClassStrategy__Group__2__Impl
	rule__TablePerClassStrategy__Group__3
;
finally {
	restoreStackSize(stackSize);
}

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

rule__TablePerClassStrategy__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__TablePerClassStrategy__Group__3__Impl
	rule__TablePerClassStrategy__Group__4
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerClassStrategy__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getTablePerClassStrategyAccess().getUnorderedGroup_3()); }
	(rule__TablePerClassStrategy__UnorderedGroup_3)
	{ after(grammarAccess.getTablePerClassStrategyAccess().getUnorderedGroup_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerClassStrategy__Group__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__TablePerClassStrategy__Group__4__Impl
;
finally {
	restoreStackSize(stackSize);
}

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


rule__TablePerClassStrategy__Group_3_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__TablePerClassStrategy__Group_3_0__0__Impl
	rule__TablePerClassStrategy__Group_3_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerClassStrategy__Group_3_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getTablePerClassStrategyAccess().getDiscriminatorColumnKeyword_3_0_0()); }
	'discriminatorColumn'
	{ after(grammarAccess.getTablePerClassStrategyAccess().getDiscriminatorColumnKeyword_3_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerClassStrategy__Group_3_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__TablePerClassStrategy__Group_3_0__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerClassStrategy__Group_3_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getTablePerClassStrategyAccess().getDiscriminatorColumnAssignment_3_0_1()); }
	(rule__TablePerClassStrategy__DiscriminatorColumnAssignment_3_0_1)
	{ after(grammarAccess.getTablePerClassStrategyAccess().getDiscriminatorColumnAssignment_3_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__TablePerClassStrategy__Group_3_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__TablePerClassStrategy__Group_3_1__0__Impl
	rule__TablePerClassStrategy__Group_3_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerClassStrategy__Group_3_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getTablePerClassStrategyAccess().getDiscriminatorTypeKeyword_3_1_0()); }
	'discriminatorType'
	{ after(grammarAccess.getTablePerClassStrategyAccess().getDiscriminatorTypeKeyword_3_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerClassStrategy__Group_3_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__TablePerClassStrategy__Group_3_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerClassStrategy__Group_3_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getTablePerClassStrategyAccess().getDiscriminatorTypeAssignment_3_1_1()); }
	(rule__TablePerClassStrategy__DiscriminatorTypeAssignment_3_1_1)
	{ after(grammarAccess.getTablePerClassStrategyAccess().getDiscriminatorTypeAssignment_3_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__TablePerClassStrategy__Group_3_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__TablePerClassStrategy__Group_3_2__0__Impl
	rule__TablePerClassStrategy__Group_3_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerClassStrategy__Group_3_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getTablePerClassStrategyAccess().getDiscriminatorValueKeyword_3_2_0()); }
	'discriminatorValue'
	{ after(grammarAccess.getTablePerClassStrategyAccess().getDiscriminatorValueKeyword_3_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerClassStrategy__Group_3_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__TablePerClassStrategy__Group_3_2__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerClassStrategy__Group_3_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getTablePerClassStrategyAccess().getDiscriminatorValueAssignment_3_2_1()); }
	(rule__TablePerClassStrategy__DiscriminatorValueAssignment_3_2_1)
	{ after(grammarAccess.getTablePerClassStrategyAccess().getDiscriminatorValueAssignment_3_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__TablePerSubclassStrategy__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__TablePerSubclassStrategy__Group__0__Impl
	rule__TablePerSubclassStrategy__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerSubclassStrategy__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getTablePerSubclassStrategyAccess().getLTablePerSubclassStrategyAction_0()); }
	()
	{ after(grammarAccess.getTablePerSubclassStrategyAccess().getLTablePerSubclassStrategyAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerSubclassStrategy__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__TablePerSubclassStrategy__Group__1__Impl
	rule__TablePerSubclassStrategy__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerSubclassStrategy__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getTablePerSubclassStrategyAccess().getInheritancePerSubclassKeyword_1()); }
	'inheritancePerSubclass'
	{ after(grammarAccess.getTablePerSubclassStrategyAccess().getInheritancePerSubclassKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerSubclassStrategy__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__TablePerSubclassStrategy__Group__2__Impl
	rule__TablePerSubclassStrategy__Group__3
;
finally {
	restoreStackSize(stackSize);
}

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

rule__TablePerSubclassStrategy__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__TablePerSubclassStrategy__Group__3__Impl
	rule__TablePerSubclassStrategy__Group__4
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerSubclassStrategy__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getTablePerSubclassStrategyAccess().getUnorderedGroup_3()); }
	(rule__TablePerSubclassStrategy__UnorderedGroup_3)
	{ after(grammarAccess.getTablePerSubclassStrategyAccess().getUnorderedGroup_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerSubclassStrategy__Group__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__TablePerSubclassStrategy__Group__4__Impl
;
finally {
	restoreStackSize(stackSize);
}

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


rule__TablePerSubclassStrategy__Group_3_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__TablePerSubclassStrategy__Group_3_0__0__Impl
	rule__TablePerSubclassStrategy__Group_3_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerSubclassStrategy__Group_3_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getTablePerSubclassStrategyAccess().getDiscriminatorColumnKeyword_3_0_0()); }
	'discriminatorColumn'
	{ after(grammarAccess.getTablePerSubclassStrategyAccess().getDiscriminatorColumnKeyword_3_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerSubclassStrategy__Group_3_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__TablePerSubclassStrategy__Group_3_0__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerSubclassStrategy__Group_3_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getTablePerSubclassStrategyAccess().getDiscriminatorColumnAssignment_3_0_1()); }
	(rule__TablePerSubclassStrategy__DiscriminatorColumnAssignment_3_0_1)
	{ after(grammarAccess.getTablePerSubclassStrategyAccess().getDiscriminatorColumnAssignment_3_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__TablePerSubclassStrategy__Group_3_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__TablePerSubclassStrategy__Group_3_1__0__Impl
	rule__TablePerSubclassStrategy__Group_3_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerSubclassStrategy__Group_3_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getTablePerSubclassStrategyAccess().getDiscriminatorTypeKeyword_3_1_0()); }
	'discriminatorType'
	{ after(grammarAccess.getTablePerSubclassStrategyAccess().getDiscriminatorTypeKeyword_3_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerSubclassStrategy__Group_3_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__TablePerSubclassStrategy__Group_3_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerSubclassStrategy__Group_3_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getTablePerSubclassStrategyAccess().getDiscriminatorTypeAssignment_3_1_1()); }
	(rule__TablePerSubclassStrategy__DiscriminatorTypeAssignment_3_1_1)
	{ after(grammarAccess.getTablePerSubclassStrategyAccess().getDiscriminatorTypeAssignment_3_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__TablePerSubclassStrategy__Group_3_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__TablePerSubclassStrategy__Group_3_2__0__Impl
	rule__TablePerSubclassStrategy__Group_3_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerSubclassStrategy__Group_3_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getTablePerSubclassStrategyAccess().getDiscriminatorValueKeyword_3_2_0()); }
	'discriminatorValue'
	{ after(grammarAccess.getTablePerSubclassStrategyAccess().getDiscriminatorValueKeyword_3_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerSubclassStrategy__Group_3_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__TablePerSubclassStrategy__Group_3_2__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerSubclassStrategy__Group_3_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getTablePerSubclassStrategyAccess().getDiscriminatorValueAssignment_3_2_1()); }
	(rule__TablePerSubclassStrategy__DiscriminatorValueAssignment_3_2_1)
	{ after(grammarAccess.getTablePerSubclassStrategyAccess().getDiscriminatorValueAssignment_3_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__TypedPackage__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__TypedPackage__Group__0__Impl
	rule__TypedPackage__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__TypedPackage__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getTypedPackageAccess().getLTypedPackageAction_0()); }
	()
	{ after(grammarAccess.getTypedPackageAccess().getLTypedPackageAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__TypedPackage__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__TypedPackage__Group__1__Impl
	rule__TypedPackage__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__TypedPackage__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getTypedPackageAccess().getPackageKeyword_1()); }
	'package'
	{ after(grammarAccess.getTypedPackageAccess().getPackageKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__TypedPackage__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__TypedPackage__Group__2__Impl
	rule__TypedPackage__Group__3
;
finally {
	restoreStackSize(stackSize);
}

rule__TypedPackage__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getTypedPackageAccess().getNameAssignment_2()); }
	(rule__TypedPackage__NameAssignment_2)
	{ after(grammarAccess.getTypedPackageAccess().getNameAssignment_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__TypedPackage__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__TypedPackage__Group__3__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__TypedPackage__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getTypedPackageAccess().getGroup_3()); }
	(rule__TypedPackage__Group_3__0)?
	{ after(grammarAccess.getTypedPackageAccess().getGroup_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__TypedPackage__Group_3__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__TypedPackage__Group_3__0__Impl
	rule__TypedPackage__Group_3__1
;
finally {
	restoreStackSize(stackSize);
}

rule__TypedPackage__Group_3__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getTypedPackageAccess().getLeftCurlyBracketKeyword_3_0()); }
	'{'
	{ after(grammarAccess.getTypedPackageAccess().getLeftCurlyBracketKeyword_3_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__TypedPackage__Group_3__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__TypedPackage__Group_3__1__Impl
	rule__TypedPackage__Group_3__2
;
finally {
	restoreStackSize(stackSize);
}

rule__TypedPackage__Group_3__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getTypedPackageAccess().getTypesAssignment_3_1()); }
	(rule__TypedPackage__TypesAssignment_3_1)*
	{ after(grammarAccess.getTypedPackageAccess().getTypesAssignment_3_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__TypedPackage__Group_3__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__TypedPackage__Group_3__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__TypedPackage__Group_3__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getTypedPackageAccess().getRightCurlyBracketKeyword_3_2()); }
	'}'
	{ after(grammarAccess.getTypedPackageAccess().getRightCurlyBracketKeyword_3_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DataType__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DataType__Group__0__Impl
	rule__DataType__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDataTypeAccess().getDatatypeKeyword_0()); }
	'datatype'
	{ after(grammarAccess.getDataTypeAccess().getDatatypeKeyword_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DataType__Group__1__Impl
	rule__DataType__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDataTypeAccess().getNameAssignment_1()); }
	(rule__DataType__NameAssignment_1)
	{ after(grammarAccess.getDataTypeAccess().getNameAssignment_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DataType__Group__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDataTypeAccess().getAlternatives_2()); }
	(rule__DataType__Alternatives_2)
	{ after(grammarAccess.getDataTypeAccess().getAlternatives_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DataType__Group_2_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DataType__Group_2_0__0__Impl
	rule__DataType__Group_2_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDataTypeAccess().getJvmTypeKeyword_2_0_0()); }
	'jvmType'
	{ after(grammarAccess.getDataTypeAccess().getJvmTypeKeyword_2_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DataType__Group_2_0__1__Impl
	rule__DataType__Group_2_0__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDataTypeAccess().getJvmTypeReferenceAssignment_2_0_1()); }
	(rule__DataType__JvmTypeReferenceAssignment_2_0_1)
	{ after(grammarAccess.getDataTypeAccess().getJvmTypeReferenceAssignment_2_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_0__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DataType__Group_2_0__2__Impl
	rule__DataType__Group_2_0__3
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_0__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDataTypeAccess().getAsPrimitiveAssignment_2_0_2()); }
	(rule__DataType__AsPrimitiveAssignment_2_0_2)?
	{ after(grammarAccess.getDataTypeAccess().getAsPrimitiveAssignment_2_0_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_0__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DataType__Group_2_0__3__Impl
	rule__DataType__Group_2_0__4
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_0__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDataTypeAccess().getConstraintsAssignment_2_0_3()); }
	(rule__DataType__ConstraintsAssignment_2_0_3)*
	{ after(grammarAccess.getDataTypeAccess().getConstraintsAssignment_2_0_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_0__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DataType__Group_2_0__4__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_0__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDataTypeAccess().getGroup_2_0_4()); }
	(rule__DataType__Group_2_0_4__0)?
	{ after(grammarAccess.getDataTypeAccess().getGroup_2_0_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DataType__Group_2_0_4__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DataType__Group_2_0_4__0__Impl
	rule__DataType__Group_2_0_4__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_0_4__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDataTypeAccess().getPropertiesKeyword_2_0_4_0()); }
	'properties'
	{ after(grammarAccess.getDataTypeAccess().getPropertiesKeyword_2_0_4_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_0_4__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DataType__Group_2_0_4__1__Impl
	rule__DataType__Group_2_0_4__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_0_4__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDataTypeAccess().getLeftParenthesisKeyword_2_0_4_1()); }
	'('
	{ after(grammarAccess.getDataTypeAccess().getLeftParenthesisKeyword_2_0_4_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_0_4__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DataType__Group_2_0_4__2__Impl
	rule__DataType__Group_2_0_4__3
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_0_4__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDataTypeAccess().getPropertiesAssignment_2_0_4_2()); }
	(rule__DataType__PropertiesAssignment_2_0_4_2)
	{ after(grammarAccess.getDataTypeAccess().getPropertiesAssignment_2_0_4_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_0_4__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DataType__Group_2_0_4__3__Impl
	rule__DataType__Group_2_0_4__4
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_0_4__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDataTypeAccess().getGroup_2_0_4_3()); }
	(rule__DataType__Group_2_0_4_3__0)*
	{ after(grammarAccess.getDataTypeAccess().getGroup_2_0_4_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_0_4__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DataType__Group_2_0_4__4__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_0_4__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDataTypeAccess().getRightParenthesisKeyword_2_0_4_4()); }
	')'
	{ after(grammarAccess.getDataTypeAccess().getRightParenthesisKeyword_2_0_4_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DataType__Group_2_0_4_3__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DataType__Group_2_0_4_3__0__Impl
	rule__DataType__Group_2_0_4_3__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_0_4_3__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDataTypeAccess().getCommaKeyword_2_0_4_3_0()); }
	','
	{ after(grammarAccess.getDataTypeAccess().getCommaKeyword_2_0_4_3_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_0_4_3__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DataType__Group_2_0_4_3__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_0_4_3__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDataTypeAccess().getPropertiesAssignment_2_0_4_3_1()); }
	(rule__DataType__PropertiesAssignment_2_0_4_3_1)
	{ after(grammarAccess.getDataTypeAccess().getPropertiesAssignment_2_0_4_3_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DataType__Group_2_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DataType__Group_2_1__0__Impl
	rule__DataType__Group_2_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDataTypeAccess().getDateAssignment_2_1_0()); }
	(rule__DataType__DateAssignment_2_1_0)
	{ after(grammarAccess.getDataTypeAccess().getDateAssignment_2_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DataType__Group_2_1__1__Impl
	rule__DataType__Group_2_1__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDataTypeAccess().getDateTypeAssignment_2_1_1()); }
	(rule__DataType__DateTypeAssignment_2_1_1)
	{ after(grammarAccess.getDataTypeAccess().getDateTypeAssignment_2_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DataType__Group_2_1__2__Impl
	rule__DataType__Group_2_1__3
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_1__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDataTypeAccess().getConstraintsAssignment_2_1_2()); }
	(rule__DataType__ConstraintsAssignment_2_1_2)*
	{ after(grammarAccess.getDataTypeAccess().getConstraintsAssignment_2_1_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_1__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DataType__Group_2_1__3__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_1__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDataTypeAccess().getGroup_2_1_3()); }
	(rule__DataType__Group_2_1_3__0)?
	{ after(grammarAccess.getDataTypeAccess().getGroup_2_1_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DataType__Group_2_1_3__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DataType__Group_2_1_3__0__Impl
	rule__DataType__Group_2_1_3__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_1_3__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDataTypeAccess().getPropertiesKeyword_2_1_3_0()); }
	'properties'
	{ after(grammarAccess.getDataTypeAccess().getPropertiesKeyword_2_1_3_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_1_3__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DataType__Group_2_1_3__1__Impl
	rule__DataType__Group_2_1_3__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_1_3__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDataTypeAccess().getLeftParenthesisKeyword_2_1_3_1()); }
	'('
	{ after(grammarAccess.getDataTypeAccess().getLeftParenthesisKeyword_2_1_3_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_1_3__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DataType__Group_2_1_3__2__Impl
	rule__DataType__Group_2_1_3__3
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_1_3__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDataTypeAccess().getPropertiesAssignment_2_1_3_2()); }
	(rule__DataType__PropertiesAssignment_2_1_3_2)
	{ after(grammarAccess.getDataTypeAccess().getPropertiesAssignment_2_1_3_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_1_3__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DataType__Group_2_1_3__3__Impl
	rule__DataType__Group_2_1_3__4
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_1_3__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDataTypeAccess().getGroup_2_1_3_3()); }
	(rule__DataType__Group_2_1_3_3__0)*
	{ after(grammarAccess.getDataTypeAccess().getGroup_2_1_3_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_1_3__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DataType__Group_2_1_3__4__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_1_3__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDataTypeAccess().getRightParenthesisKeyword_2_1_3_4()); }
	')'
	{ after(grammarAccess.getDataTypeAccess().getRightParenthesisKeyword_2_1_3_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DataType__Group_2_1_3_3__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DataType__Group_2_1_3_3__0__Impl
	rule__DataType__Group_2_1_3_3__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_1_3_3__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDataTypeAccess().getCommaKeyword_2_1_3_3_0()); }
	','
	{ after(grammarAccess.getDataTypeAccess().getCommaKeyword_2_1_3_3_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_1_3_3__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DataType__Group_2_1_3_3__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_1_3_3__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDataTypeAccess().getPropertiesAssignment_2_1_3_3_1()); }
	(rule__DataType__PropertiesAssignment_2_1_3_3_1)
	{ after(grammarAccess.getDataTypeAccess().getPropertiesAssignment_2_1_3_3_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DataType__Group_2_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DataType__Group_2_2__0__Impl
	rule__DataType__Group_2_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDataTypeAccess().getAsBlobAssignment_2_2_0()); }
	(rule__DataType__AsBlobAssignment_2_2_0)
	{ after(grammarAccess.getDataTypeAccess().getAsBlobAssignment_2_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DataType__Group_2_2__1__Impl
	rule__DataType__Group_2_2__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDataTypeAccess().getConstraintsAssignment_2_2_1()); }
	(rule__DataType__ConstraintsAssignment_2_2_1)*
	{ after(grammarAccess.getDataTypeAccess().getConstraintsAssignment_2_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_2__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DataType__Group_2_2__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_2__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDataTypeAccess().getGroup_2_2_2()); }
	(rule__DataType__Group_2_2_2__0)?
	{ after(grammarAccess.getDataTypeAccess().getGroup_2_2_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DataType__Group_2_2_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DataType__Group_2_2_2__0__Impl
	rule__DataType__Group_2_2_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_2_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDataTypeAccess().getPropertiesKeyword_2_2_2_0()); }
	'properties'
	{ after(grammarAccess.getDataTypeAccess().getPropertiesKeyword_2_2_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_2_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DataType__Group_2_2_2__1__Impl
	rule__DataType__Group_2_2_2__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_2_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDataTypeAccess().getLeftParenthesisKeyword_2_2_2_1()); }
	'('
	{ after(grammarAccess.getDataTypeAccess().getLeftParenthesisKeyword_2_2_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_2_2__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DataType__Group_2_2_2__2__Impl
	rule__DataType__Group_2_2_2__3
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_2_2__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDataTypeAccess().getPropertiesAssignment_2_2_2_2()); }
	(rule__DataType__PropertiesAssignment_2_2_2_2)
	{ after(grammarAccess.getDataTypeAccess().getPropertiesAssignment_2_2_2_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_2_2__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DataType__Group_2_2_2__3__Impl
	rule__DataType__Group_2_2_2__4
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_2_2__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDataTypeAccess().getGroup_2_2_2_3()); }
	(rule__DataType__Group_2_2_2_3__0)*
	{ after(grammarAccess.getDataTypeAccess().getGroup_2_2_2_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_2_2__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DataType__Group_2_2_2__4__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_2_2__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDataTypeAccess().getRightParenthesisKeyword_2_2_2_4()); }
	')'
	{ after(grammarAccess.getDataTypeAccess().getRightParenthesisKeyword_2_2_2_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DataType__Group_2_2_2_3__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DataType__Group_2_2_2_3__0__Impl
	rule__DataType__Group_2_2_2_3__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_2_2_3__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDataTypeAccess().getCommaKeyword_2_2_2_3_0()); }
	','
	{ after(grammarAccess.getDataTypeAccess().getCommaKeyword_2_2_2_3_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_2_2_3__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DataType__Group_2_2_2_3__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__Group_2_2_2_3__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDataTypeAccess().getPropertiesAssignment_2_2_2_3_1()); }
	(rule__DataType__PropertiesAssignment_2_2_2_3_1)
	{ after(grammarAccess.getDataTypeAccess().getPropertiesAssignment_2_2_2_3_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCAssertFalse__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCAssertFalse__Group__0__Impl
	rule__DtCAssertFalse__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertFalse__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCAssertFalseAccess().getLDtCAssertFalseAction_0()); }
	()
	{ after(grammarAccess.getDtCAssertFalseAccess().getLDtCAssertFalseAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertFalse__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCAssertFalse__Group__1__Impl
	rule__DtCAssertFalse__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertFalse__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCAssertFalseAccess().getIsFalseKeyword_1()); }
	'isFalse'
	{ after(grammarAccess.getDtCAssertFalseAccess().getIsFalseKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertFalse__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCAssertFalse__Group__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertFalse__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCAssertFalseAccess().getGroup_2()); }
	(rule__DtCAssertFalse__Group_2__0)?
	{ after(grammarAccess.getDtCAssertFalseAccess().getGroup_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCAssertFalse__Group_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCAssertFalse__Group_2__0__Impl
	rule__DtCAssertFalse__Group_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertFalse__Group_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCAssertFalseAccess().getLeftSquareBracketKeyword_2_0()); }
	'['
	{ after(grammarAccess.getDtCAssertFalseAccess().getLeftSquareBracketKeyword_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertFalse__Group_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCAssertFalse__Group_2__1__Impl
	rule__DtCAssertFalse__Group_2__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertFalse__Group_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCAssertFalseAccess().getUnorderedGroup_2_1()); }
	(rule__DtCAssertFalse__UnorderedGroup_2_1)
	{ after(grammarAccess.getDtCAssertFalseAccess().getUnorderedGroup_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertFalse__Group_2__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCAssertFalse__Group_2__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertFalse__Group_2__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCAssertFalseAccess().getRightSquareBracketKeyword_2_2()); }
	']'
	{ after(grammarAccess.getDtCAssertFalseAccess().getRightSquareBracketKeyword_2_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCAssertFalse__Group_2_1_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCAssertFalse__Group_2_1_0__0__Impl
	rule__DtCAssertFalse__Group_2_1_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertFalse__Group_2_1_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCAssertFalseAccess().getMsgCodeKeyword_2_1_0_0()); }
	'msgCode'
	{ after(grammarAccess.getDtCAssertFalseAccess().getMsgCodeKeyword_2_1_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertFalse__Group_2_1_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCAssertFalse__Group_2_1_0__1__Impl
	rule__DtCAssertFalse__Group_2_1_0__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertFalse__Group_2_1_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCAssertFalseAccess().getEqualsSignKeyword_2_1_0_1()); }
	'='
	{ after(grammarAccess.getDtCAssertFalseAccess().getEqualsSignKeyword_2_1_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertFalse__Group_2_1_0__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCAssertFalse__Group_2_1_0__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertFalse__Group_2_1_0__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCAssertFalseAccess().getMsgCodeAssignment_2_1_0_2()); }
	(rule__DtCAssertFalse__MsgCodeAssignment_2_1_0_2)
	{ after(grammarAccess.getDtCAssertFalseAccess().getMsgCodeAssignment_2_1_0_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCAssertFalse__Group_2_1_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCAssertFalse__Group_2_1_1__0__Impl
	rule__DtCAssertFalse__Group_2_1_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertFalse__Group_2_1_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCAssertFalseAccess().getMsgI18nKeyKeyword_2_1_1_0()); }
	'msgI18nKey'
	{ after(grammarAccess.getDtCAssertFalseAccess().getMsgI18nKeyKeyword_2_1_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertFalse__Group_2_1_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCAssertFalse__Group_2_1_1__1__Impl
	rule__DtCAssertFalse__Group_2_1_1__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertFalse__Group_2_1_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCAssertFalseAccess().getEqualsSignKeyword_2_1_1_1()); }
	'='
	{ after(grammarAccess.getDtCAssertFalseAccess().getEqualsSignKeyword_2_1_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertFalse__Group_2_1_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCAssertFalse__Group_2_1_1__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertFalse__Group_2_1_1__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCAssertFalseAccess().getMsgI18nKeyAssignment_2_1_1_2()); }
	(rule__DtCAssertFalse__MsgI18nKeyAssignment_2_1_1_2)
	{ after(grammarAccess.getDtCAssertFalseAccess().getMsgI18nKeyAssignment_2_1_1_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCAssertFalse__Group_2_1_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCAssertFalse__Group_2_1_2__0__Impl
	rule__DtCAssertFalse__Group_2_1_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertFalse__Group_2_1_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCAssertFalseAccess().getSeverityKeyword_2_1_2_0()); }
	'severity'
	{ after(grammarAccess.getDtCAssertFalseAccess().getSeverityKeyword_2_1_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertFalse__Group_2_1_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCAssertFalse__Group_2_1_2__1__Impl
	rule__DtCAssertFalse__Group_2_1_2__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertFalse__Group_2_1_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCAssertFalseAccess().getEqualsSignKeyword_2_1_2_1()); }
	'='
	{ after(grammarAccess.getDtCAssertFalseAccess().getEqualsSignKeyword_2_1_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertFalse__Group_2_1_2__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCAssertFalse__Group_2_1_2__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertFalse__Group_2_1_2__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCAssertFalseAccess().getSeverityAssignment_2_1_2_2()); }
	(rule__DtCAssertFalse__SeverityAssignment_2_1_2_2)
	{ after(grammarAccess.getDtCAssertFalseAccess().getSeverityAssignment_2_1_2_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCAssertTrue__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCAssertTrue__Group__0__Impl
	rule__DtCAssertTrue__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertTrue__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCAssertTrueAccess().getLDtCAssertTrueAction_0()); }
	()
	{ after(grammarAccess.getDtCAssertTrueAccess().getLDtCAssertTrueAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertTrue__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCAssertTrue__Group__1__Impl
	rule__DtCAssertTrue__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertTrue__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCAssertTrueAccess().getIsTrueKeyword_1()); }
	'isTrue'
	{ after(grammarAccess.getDtCAssertTrueAccess().getIsTrueKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertTrue__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCAssertTrue__Group__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertTrue__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCAssertTrueAccess().getGroup_2()); }
	(rule__DtCAssertTrue__Group_2__0)?
	{ after(grammarAccess.getDtCAssertTrueAccess().getGroup_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCAssertTrue__Group_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCAssertTrue__Group_2__0__Impl
	rule__DtCAssertTrue__Group_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertTrue__Group_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCAssertTrueAccess().getLeftSquareBracketKeyword_2_0()); }
	'['
	{ after(grammarAccess.getDtCAssertTrueAccess().getLeftSquareBracketKeyword_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertTrue__Group_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCAssertTrue__Group_2__1__Impl
	rule__DtCAssertTrue__Group_2__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertTrue__Group_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCAssertTrueAccess().getUnorderedGroup_2_1()); }
	(rule__DtCAssertTrue__UnorderedGroup_2_1)
	{ after(grammarAccess.getDtCAssertTrueAccess().getUnorderedGroup_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertTrue__Group_2__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCAssertTrue__Group_2__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertTrue__Group_2__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCAssertTrueAccess().getRightSquareBracketKeyword_2_2()); }
	']'
	{ after(grammarAccess.getDtCAssertTrueAccess().getRightSquareBracketKeyword_2_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCAssertTrue__Group_2_1_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCAssertTrue__Group_2_1_0__0__Impl
	rule__DtCAssertTrue__Group_2_1_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertTrue__Group_2_1_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCAssertTrueAccess().getMsgCodeKeyword_2_1_0_0()); }
	'msgCode'
	{ after(grammarAccess.getDtCAssertTrueAccess().getMsgCodeKeyword_2_1_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertTrue__Group_2_1_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCAssertTrue__Group_2_1_0__1__Impl
	rule__DtCAssertTrue__Group_2_1_0__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertTrue__Group_2_1_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCAssertTrueAccess().getEqualsSignKeyword_2_1_0_1()); }
	'='
	{ after(grammarAccess.getDtCAssertTrueAccess().getEqualsSignKeyword_2_1_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertTrue__Group_2_1_0__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCAssertTrue__Group_2_1_0__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertTrue__Group_2_1_0__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCAssertTrueAccess().getMsgCodeAssignment_2_1_0_2()); }
	(rule__DtCAssertTrue__MsgCodeAssignment_2_1_0_2)
	{ after(grammarAccess.getDtCAssertTrueAccess().getMsgCodeAssignment_2_1_0_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCAssertTrue__Group_2_1_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCAssertTrue__Group_2_1_1__0__Impl
	rule__DtCAssertTrue__Group_2_1_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertTrue__Group_2_1_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCAssertTrueAccess().getMsgI18nKeyKeyword_2_1_1_0()); }
	'msgI18nKey'
	{ after(grammarAccess.getDtCAssertTrueAccess().getMsgI18nKeyKeyword_2_1_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertTrue__Group_2_1_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCAssertTrue__Group_2_1_1__1__Impl
	rule__DtCAssertTrue__Group_2_1_1__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertTrue__Group_2_1_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCAssertTrueAccess().getEqualsSignKeyword_2_1_1_1()); }
	'='
	{ after(grammarAccess.getDtCAssertTrueAccess().getEqualsSignKeyword_2_1_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertTrue__Group_2_1_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCAssertTrue__Group_2_1_1__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertTrue__Group_2_1_1__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCAssertTrueAccess().getMsgI18nKeyAssignment_2_1_1_2()); }
	(rule__DtCAssertTrue__MsgI18nKeyAssignment_2_1_1_2)
	{ after(grammarAccess.getDtCAssertTrueAccess().getMsgI18nKeyAssignment_2_1_1_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCAssertTrue__Group_2_1_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCAssertTrue__Group_2_1_2__0__Impl
	rule__DtCAssertTrue__Group_2_1_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertTrue__Group_2_1_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCAssertTrueAccess().getSeverityKeyword_2_1_2_0()); }
	'severity'
	{ after(grammarAccess.getDtCAssertTrueAccess().getSeverityKeyword_2_1_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertTrue__Group_2_1_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCAssertTrue__Group_2_1_2__1__Impl
	rule__DtCAssertTrue__Group_2_1_2__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertTrue__Group_2_1_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCAssertTrueAccess().getEqualsSignKeyword_2_1_2_1()); }
	'='
	{ after(grammarAccess.getDtCAssertTrueAccess().getEqualsSignKeyword_2_1_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertTrue__Group_2_1_2__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCAssertTrue__Group_2_1_2__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertTrue__Group_2_1_2__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCAssertTrueAccess().getSeverityAssignment_2_1_2_2()); }
	(rule__DtCAssertTrue__SeverityAssignment_2_1_2_2)
	{ after(grammarAccess.getDtCAssertTrueAccess().getSeverityAssignment_2_1_2_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCDecimalMax__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMax__Group__0__Impl
	rule__DtCDecimalMax__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDecimalMaxAccess().getLDtCDecimalMaxAction_0()); }
	()
	{ after(grammarAccess.getDtCDecimalMaxAccess().getLDtCDecimalMaxAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMax__Group__1__Impl
	rule__DtCDecimalMax__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDecimalMaxAccess().getMaxDecimalKeyword_1()); }
	'maxDecimal'
	{ after(grammarAccess.getDtCDecimalMaxAccess().getMaxDecimalKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMax__Group__2__Impl
	rule__DtCDecimalMax__Group__3
;
finally {
	restoreStackSize(stackSize);
}

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

rule__DtCDecimalMax__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMax__Group__3__Impl
	rule__DtCDecimalMax__Group__4
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDecimalMaxAccess().getMaxAssignment_3()); }
	(rule__DtCDecimalMax__MaxAssignment_3)
	{ after(grammarAccess.getDtCDecimalMaxAccess().getMaxAssignment_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__Group__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMax__Group__4__Impl
	rule__DtCDecimalMax__Group__5
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__Group__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDecimalMaxAccess().getGroup_4()); }
	(rule__DtCDecimalMax__Group_4__0)?
	{ after(grammarAccess.getDtCDecimalMaxAccess().getGroup_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__Group__5
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMax__Group__5__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__Group__5__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDecimalMaxAccess().getRightParenthesisKeyword_5()); }
	')'
	{ after(grammarAccess.getDtCDecimalMaxAccess().getRightParenthesisKeyword_5()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCDecimalMax__Group_4__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMax__Group_4__0__Impl
	rule__DtCDecimalMax__Group_4__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__Group_4__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDecimalMaxAccess().getLeftSquareBracketKeyword_4_0()); }
	'['
	{ after(grammarAccess.getDtCDecimalMaxAccess().getLeftSquareBracketKeyword_4_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__Group_4__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMax__Group_4__1__Impl
	rule__DtCDecimalMax__Group_4__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__Group_4__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDecimalMaxAccess().getUnorderedGroup_4_1()); }
	(rule__DtCDecimalMax__UnorderedGroup_4_1)
	{ after(grammarAccess.getDtCDecimalMaxAccess().getUnorderedGroup_4_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__Group_4__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMax__Group_4__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__Group_4__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDecimalMaxAccess().getRightSquareBracketKeyword_4_2()); }
	']'
	{ after(grammarAccess.getDtCDecimalMaxAccess().getRightSquareBracketKeyword_4_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCDecimalMax__Group_4_1_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMax__Group_4_1_0__0__Impl
	rule__DtCDecimalMax__Group_4_1_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__Group_4_1_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDecimalMaxAccess().getMsgCodeKeyword_4_1_0_0()); }
	'msgCode'
	{ after(grammarAccess.getDtCDecimalMaxAccess().getMsgCodeKeyword_4_1_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__Group_4_1_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMax__Group_4_1_0__1__Impl
	rule__DtCDecimalMax__Group_4_1_0__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__Group_4_1_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDecimalMaxAccess().getEqualsSignKeyword_4_1_0_1()); }
	'='
	{ after(grammarAccess.getDtCDecimalMaxAccess().getEqualsSignKeyword_4_1_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__Group_4_1_0__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMax__Group_4_1_0__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__Group_4_1_0__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDecimalMaxAccess().getMsgCodeAssignment_4_1_0_2()); }
	(rule__DtCDecimalMax__MsgCodeAssignment_4_1_0_2)
	{ after(grammarAccess.getDtCDecimalMaxAccess().getMsgCodeAssignment_4_1_0_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCDecimalMax__Group_4_1_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMax__Group_4_1_1__0__Impl
	rule__DtCDecimalMax__Group_4_1_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__Group_4_1_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDecimalMaxAccess().getMsgI18nKeyKeyword_4_1_1_0()); }
	'msgI18nKey'
	{ after(grammarAccess.getDtCDecimalMaxAccess().getMsgI18nKeyKeyword_4_1_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__Group_4_1_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMax__Group_4_1_1__1__Impl
	rule__DtCDecimalMax__Group_4_1_1__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__Group_4_1_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDecimalMaxAccess().getEqualsSignKeyword_4_1_1_1()); }
	'='
	{ after(grammarAccess.getDtCDecimalMaxAccess().getEqualsSignKeyword_4_1_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__Group_4_1_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMax__Group_4_1_1__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__Group_4_1_1__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDecimalMaxAccess().getMsgI18nKeyAssignment_4_1_1_2()); }
	(rule__DtCDecimalMax__MsgI18nKeyAssignment_4_1_1_2)
	{ after(grammarAccess.getDtCDecimalMaxAccess().getMsgI18nKeyAssignment_4_1_1_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCDecimalMax__Group_4_1_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMax__Group_4_1_2__0__Impl
	rule__DtCDecimalMax__Group_4_1_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__Group_4_1_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDecimalMaxAccess().getSeverityKeyword_4_1_2_0()); }
	'severity'
	{ after(grammarAccess.getDtCDecimalMaxAccess().getSeverityKeyword_4_1_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__Group_4_1_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMax__Group_4_1_2__1__Impl
	rule__DtCDecimalMax__Group_4_1_2__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__Group_4_1_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDecimalMaxAccess().getEqualsSignKeyword_4_1_2_1()); }
	'='
	{ after(grammarAccess.getDtCDecimalMaxAccess().getEqualsSignKeyword_4_1_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__Group_4_1_2__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMax__Group_4_1_2__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__Group_4_1_2__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDecimalMaxAccess().getSeverityAssignment_4_1_2_2()); }
	(rule__DtCDecimalMax__SeverityAssignment_4_1_2_2)
	{ after(grammarAccess.getDtCDecimalMaxAccess().getSeverityAssignment_4_1_2_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCDecimalMin__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMin__Group__0__Impl
	rule__DtCDecimalMin__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDecimalMinAccess().getLDtCDecimalMinAction_0()); }
	()
	{ after(grammarAccess.getDtCDecimalMinAccess().getLDtCDecimalMinAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMin__Group__1__Impl
	rule__DtCDecimalMin__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDecimalMinAccess().getMinDecimalKeyword_1()); }
	'minDecimal'
	{ after(grammarAccess.getDtCDecimalMinAccess().getMinDecimalKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMin__Group__2__Impl
	rule__DtCDecimalMin__Group__3
;
finally {
	restoreStackSize(stackSize);
}

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

rule__DtCDecimalMin__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMin__Group__3__Impl
	rule__DtCDecimalMin__Group__4
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDecimalMinAccess().getMinAssignment_3()); }
	(rule__DtCDecimalMin__MinAssignment_3)
	{ after(grammarAccess.getDtCDecimalMinAccess().getMinAssignment_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__Group__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMin__Group__4__Impl
	rule__DtCDecimalMin__Group__5
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__Group__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDecimalMinAccess().getGroup_4()); }
	(rule__DtCDecimalMin__Group_4__0)?
	{ after(grammarAccess.getDtCDecimalMinAccess().getGroup_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__Group__5
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMin__Group__5__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__Group__5__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDecimalMinAccess().getRightParenthesisKeyword_5()); }
	')'
	{ after(grammarAccess.getDtCDecimalMinAccess().getRightParenthesisKeyword_5()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCDecimalMin__Group_4__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMin__Group_4__0__Impl
	rule__DtCDecimalMin__Group_4__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__Group_4__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDecimalMinAccess().getLeftSquareBracketKeyword_4_0()); }
	'['
	{ after(grammarAccess.getDtCDecimalMinAccess().getLeftSquareBracketKeyword_4_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__Group_4__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMin__Group_4__1__Impl
	rule__DtCDecimalMin__Group_4__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__Group_4__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDecimalMinAccess().getUnorderedGroup_4_1()); }
	(rule__DtCDecimalMin__UnorderedGroup_4_1)
	{ after(grammarAccess.getDtCDecimalMinAccess().getUnorderedGroup_4_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__Group_4__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMin__Group_4__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__Group_4__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDecimalMinAccess().getRightSquareBracketKeyword_4_2()); }
	']'
	{ after(grammarAccess.getDtCDecimalMinAccess().getRightSquareBracketKeyword_4_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCDecimalMin__Group_4_1_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMin__Group_4_1_0__0__Impl
	rule__DtCDecimalMin__Group_4_1_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__Group_4_1_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDecimalMinAccess().getMsgCodeKeyword_4_1_0_0()); }
	'msgCode'
	{ after(grammarAccess.getDtCDecimalMinAccess().getMsgCodeKeyword_4_1_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__Group_4_1_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMin__Group_4_1_0__1__Impl
	rule__DtCDecimalMin__Group_4_1_0__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__Group_4_1_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDecimalMinAccess().getEqualsSignKeyword_4_1_0_1()); }
	'='
	{ after(grammarAccess.getDtCDecimalMinAccess().getEqualsSignKeyword_4_1_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__Group_4_1_0__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMin__Group_4_1_0__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__Group_4_1_0__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDecimalMinAccess().getMsgCodeAssignment_4_1_0_2()); }
	(rule__DtCDecimalMin__MsgCodeAssignment_4_1_0_2)
	{ after(grammarAccess.getDtCDecimalMinAccess().getMsgCodeAssignment_4_1_0_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCDecimalMin__Group_4_1_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMin__Group_4_1_1__0__Impl
	rule__DtCDecimalMin__Group_4_1_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__Group_4_1_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDecimalMinAccess().getMsgI18nKeyKeyword_4_1_1_0()); }
	'msgI18nKey'
	{ after(grammarAccess.getDtCDecimalMinAccess().getMsgI18nKeyKeyword_4_1_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__Group_4_1_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMin__Group_4_1_1__1__Impl
	rule__DtCDecimalMin__Group_4_1_1__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__Group_4_1_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDecimalMinAccess().getEqualsSignKeyword_4_1_1_1()); }
	'='
	{ after(grammarAccess.getDtCDecimalMinAccess().getEqualsSignKeyword_4_1_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__Group_4_1_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMin__Group_4_1_1__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__Group_4_1_1__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDecimalMinAccess().getMsgI18nKeyAssignment_4_1_1_2()); }
	(rule__DtCDecimalMin__MsgI18nKeyAssignment_4_1_1_2)
	{ after(grammarAccess.getDtCDecimalMinAccess().getMsgI18nKeyAssignment_4_1_1_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCDecimalMin__Group_4_1_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMin__Group_4_1_2__0__Impl
	rule__DtCDecimalMin__Group_4_1_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__Group_4_1_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDecimalMinAccess().getSeverityKeyword_4_1_2_0()); }
	'severity'
	{ after(grammarAccess.getDtCDecimalMinAccess().getSeverityKeyword_4_1_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__Group_4_1_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMin__Group_4_1_2__1__Impl
	rule__DtCDecimalMin__Group_4_1_2__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__Group_4_1_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDecimalMinAccess().getEqualsSignKeyword_4_1_2_1()); }
	'='
	{ after(grammarAccess.getDtCDecimalMinAccess().getEqualsSignKeyword_4_1_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__Group_4_1_2__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMin__Group_4_1_2__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__Group_4_1_2__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDecimalMinAccess().getSeverityAssignment_4_1_2_2()); }
	(rule__DtCDecimalMin__SeverityAssignment_4_1_2_2)
	{ after(grammarAccess.getDtCDecimalMinAccess().getSeverityAssignment_4_1_2_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCDigits__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDigits__Group__0__Impl
	rule__DtCDigits__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDigitsAccess().getLDtCDigitsAction_0()); }
	()
	{ after(grammarAccess.getDtCDigitsAccess().getLDtCDigitsAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDigits__Group__1__Impl
	rule__DtCDigits__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDigitsAccess().getDigitsKeyword_1()); }
	'digits'
	{ after(grammarAccess.getDtCDigitsAccess().getDigitsKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDigits__Group__2__Impl
	rule__DtCDigits__Group__3
;
finally {
	restoreStackSize(stackSize);
}

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

rule__DtCDigits__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDigits__Group__3__Impl
	rule__DtCDigits__Group__4
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDigitsAccess().getIntDigitsAssignment_3()); }
	(rule__DtCDigits__IntDigitsAssignment_3)
	{ after(grammarAccess.getDtCDigitsAccess().getIntDigitsAssignment_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__Group__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDigits__Group__4__Impl
	rule__DtCDigits__Group__5
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__Group__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDigitsAccess().getCommaKeyword_4()); }
	','
	{ after(grammarAccess.getDtCDigitsAccess().getCommaKeyword_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__Group__5
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDigits__Group__5__Impl
	rule__DtCDigits__Group__6
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__Group__5__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDigitsAccess().getFractionDigitsAssignment_5()); }
	(rule__DtCDigits__FractionDigitsAssignment_5)
	{ after(grammarAccess.getDtCDigitsAccess().getFractionDigitsAssignment_5()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__Group__6
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDigits__Group__6__Impl
	rule__DtCDigits__Group__7
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__Group__6__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDigitsAccess().getGroup_6()); }
	(rule__DtCDigits__Group_6__0)?
	{ after(grammarAccess.getDtCDigitsAccess().getGroup_6()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__Group__7
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDigits__Group__7__Impl
;
finally {
	restoreStackSize(stackSize);
}

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


rule__DtCDigits__Group_6__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDigits__Group_6__0__Impl
	rule__DtCDigits__Group_6__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__Group_6__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDigitsAccess().getLeftSquareBracketKeyword_6_0()); }
	'['
	{ after(grammarAccess.getDtCDigitsAccess().getLeftSquareBracketKeyword_6_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__Group_6__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDigits__Group_6__1__Impl
	rule__DtCDigits__Group_6__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__Group_6__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDigitsAccess().getUnorderedGroup_6_1()); }
	(rule__DtCDigits__UnorderedGroup_6_1)
	{ after(grammarAccess.getDtCDigitsAccess().getUnorderedGroup_6_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__Group_6__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDigits__Group_6__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__Group_6__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDigitsAccess().getRightSquareBracketKeyword_6_2()); }
	']'
	{ after(grammarAccess.getDtCDigitsAccess().getRightSquareBracketKeyword_6_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCDigits__Group_6_1_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDigits__Group_6_1_0__0__Impl
	rule__DtCDigits__Group_6_1_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__Group_6_1_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDigitsAccess().getMsgCodeKeyword_6_1_0_0()); }
	'msgCode'
	{ after(grammarAccess.getDtCDigitsAccess().getMsgCodeKeyword_6_1_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__Group_6_1_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDigits__Group_6_1_0__1__Impl
	rule__DtCDigits__Group_6_1_0__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__Group_6_1_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDigitsAccess().getEqualsSignKeyword_6_1_0_1()); }
	'='
	{ after(grammarAccess.getDtCDigitsAccess().getEqualsSignKeyword_6_1_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__Group_6_1_0__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDigits__Group_6_1_0__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__Group_6_1_0__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDigitsAccess().getMsgCodeAssignment_6_1_0_2()); }
	(rule__DtCDigits__MsgCodeAssignment_6_1_0_2)
	{ after(grammarAccess.getDtCDigitsAccess().getMsgCodeAssignment_6_1_0_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCDigits__Group_6_1_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDigits__Group_6_1_1__0__Impl
	rule__DtCDigits__Group_6_1_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__Group_6_1_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDigitsAccess().getMsgI18nKeyKeyword_6_1_1_0()); }
	'msgI18nKey'
	{ after(grammarAccess.getDtCDigitsAccess().getMsgI18nKeyKeyword_6_1_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__Group_6_1_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDigits__Group_6_1_1__1__Impl
	rule__DtCDigits__Group_6_1_1__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__Group_6_1_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDigitsAccess().getEqualsSignKeyword_6_1_1_1()); }
	'='
	{ after(grammarAccess.getDtCDigitsAccess().getEqualsSignKeyword_6_1_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__Group_6_1_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDigits__Group_6_1_1__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__Group_6_1_1__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDigitsAccess().getMsgI18nKeyAssignment_6_1_1_2()); }
	(rule__DtCDigits__MsgI18nKeyAssignment_6_1_1_2)
	{ after(grammarAccess.getDtCDigitsAccess().getMsgI18nKeyAssignment_6_1_1_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCDigits__Group_6_1_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDigits__Group_6_1_2__0__Impl
	rule__DtCDigits__Group_6_1_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__Group_6_1_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDigitsAccess().getSeverityKeyword_6_1_2_0()); }
	'severity'
	{ after(grammarAccess.getDtCDigitsAccess().getSeverityKeyword_6_1_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__Group_6_1_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDigits__Group_6_1_2__1__Impl
	rule__DtCDigits__Group_6_1_2__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__Group_6_1_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDigitsAccess().getEqualsSignKeyword_6_1_2_1()); }
	'='
	{ after(grammarAccess.getDtCDigitsAccess().getEqualsSignKeyword_6_1_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__Group_6_1_2__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDigits__Group_6_1_2__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__Group_6_1_2__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCDigitsAccess().getSeverityAssignment_6_1_2_2()); }
	(rule__DtCDigits__SeverityAssignment_6_1_2_2)
	{ after(grammarAccess.getDtCDigitsAccess().getSeverityAssignment_6_1_2_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCFuture__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCFuture__Group__0__Impl
	rule__DtCFuture__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCFuture__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCFutureAccess().getLDtCFutureAction_0()); }
	()
	{ after(grammarAccess.getDtCFutureAccess().getLDtCFutureAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCFuture__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCFuture__Group__1__Impl
	rule__DtCFuture__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCFuture__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCFutureAccess().getIsFutureKeyword_1()); }
	'isFuture'
	{ after(grammarAccess.getDtCFutureAccess().getIsFutureKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCFuture__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCFuture__Group__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCFuture__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCFutureAccess().getGroup_2()); }
	(rule__DtCFuture__Group_2__0)?
	{ after(grammarAccess.getDtCFutureAccess().getGroup_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCFuture__Group_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCFuture__Group_2__0__Impl
	rule__DtCFuture__Group_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCFuture__Group_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCFutureAccess().getLeftSquareBracketKeyword_2_0()); }
	'['
	{ after(grammarAccess.getDtCFutureAccess().getLeftSquareBracketKeyword_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCFuture__Group_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCFuture__Group_2__1__Impl
	rule__DtCFuture__Group_2__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCFuture__Group_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCFutureAccess().getUnorderedGroup_2_1()); }
	(rule__DtCFuture__UnorderedGroup_2_1)
	{ after(grammarAccess.getDtCFutureAccess().getUnorderedGroup_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCFuture__Group_2__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCFuture__Group_2__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCFuture__Group_2__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCFutureAccess().getRightSquareBracketKeyword_2_2()); }
	']'
	{ after(grammarAccess.getDtCFutureAccess().getRightSquareBracketKeyword_2_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCFuture__Group_2_1_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCFuture__Group_2_1_0__0__Impl
	rule__DtCFuture__Group_2_1_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCFuture__Group_2_1_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCFutureAccess().getMsgCodeKeyword_2_1_0_0()); }
	'msgCode'
	{ after(grammarAccess.getDtCFutureAccess().getMsgCodeKeyword_2_1_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCFuture__Group_2_1_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCFuture__Group_2_1_0__1__Impl
	rule__DtCFuture__Group_2_1_0__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCFuture__Group_2_1_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCFutureAccess().getEqualsSignKeyword_2_1_0_1()); }
	'='
	{ after(grammarAccess.getDtCFutureAccess().getEqualsSignKeyword_2_1_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCFuture__Group_2_1_0__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCFuture__Group_2_1_0__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCFuture__Group_2_1_0__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCFutureAccess().getMsgCodeAssignment_2_1_0_2()); }
	(rule__DtCFuture__MsgCodeAssignment_2_1_0_2)
	{ after(grammarAccess.getDtCFutureAccess().getMsgCodeAssignment_2_1_0_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCFuture__Group_2_1_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCFuture__Group_2_1_1__0__Impl
	rule__DtCFuture__Group_2_1_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCFuture__Group_2_1_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCFutureAccess().getMsgI18nKeyKeyword_2_1_1_0()); }
	'msgI18nKey'
	{ after(grammarAccess.getDtCFutureAccess().getMsgI18nKeyKeyword_2_1_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCFuture__Group_2_1_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCFuture__Group_2_1_1__1__Impl
	rule__DtCFuture__Group_2_1_1__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCFuture__Group_2_1_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCFutureAccess().getEqualsSignKeyword_2_1_1_1()); }
	'='
	{ after(grammarAccess.getDtCFutureAccess().getEqualsSignKeyword_2_1_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCFuture__Group_2_1_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCFuture__Group_2_1_1__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCFuture__Group_2_1_1__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCFutureAccess().getMsgI18nKeyAssignment_2_1_1_2()); }
	(rule__DtCFuture__MsgI18nKeyAssignment_2_1_1_2)
	{ after(grammarAccess.getDtCFutureAccess().getMsgI18nKeyAssignment_2_1_1_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCFuture__Group_2_1_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCFuture__Group_2_1_2__0__Impl
	rule__DtCFuture__Group_2_1_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCFuture__Group_2_1_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCFutureAccess().getSeverityKeyword_2_1_2_0()); }
	'severity'
	{ after(grammarAccess.getDtCFutureAccess().getSeverityKeyword_2_1_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCFuture__Group_2_1_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCFuture__Group_2_1_2__1__Impl
	rule__DtCFuture__Group_2_1_2__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCFuture__Group_2_1_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCFutureAccess().getEqualsSignKeyword_2_1_2_1()); }
	'='
	{ after(grammarAccess.getDtCFutureAccess().getEqualsSignKeyword_2_1_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCFuture__Group_2_1_2__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCFuture__Group_2_1_2__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCFuture__Group_2_1_2__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCFutureAccess().getSeverityAssignment_2_1_2_2()); }
	(rule__DtCFuture__SeverityAssignment_2_1_2_2)
	{ after(grammarAccess.getDtCFutureAccess().getSeverityAssignment_2_1_2_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCPast__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCPast__Group__0__Impl
	rule__DtCPast__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCPast__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCPastAccess().getLDtCPastAction_0()); }
	()
	{ after(grammarAccess.getDtCPastAccess().getLDtCPastAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCPast__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCPast__Group__1__Impl
	rule__DtCPast__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCPast__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCPastAccess().getIsPastKeyword_1()); }
	'isPast'
	{ after(grammarAccess.getDtCPastAccess().getIsPastKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCPast__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCPast__Group__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCPast__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCPastAccess().getGroup_2()); }
	(rule__DtCPast__Group_2__0)?
	{ after(grammarAccess.getDtCPastAccess().getGroup_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCPast__Group_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCPast__Group_2__0__Impl
	rule__DtCPast__Group_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCPast__Group_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCPastAccess().getLeftSquareBracketKeyword_2_0()); }
	'['
	{ after(grammarAccess.getDtCPastAccess().getLeftSquareBracketKeyword_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCPast__Group_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCPast__Group_2__1__Impl
	rule__DtCPast__Group_2__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCPast__Group_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCPastAccess().getUnorderedGroup_2_1()); }
	(rule__DtCPast__UnorderedGroup_2_1)
	{ after(grammarAccess.getDtCPastAccess().getUnorderedGroup_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCPast__Group_2__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCPast__Group_2__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCPast__Group_2__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCPastAccess().getRightSquareBracketKeyword_2_2()); }
	']'
	{ after(grammarAccess.getDtCPastAccess().getRightSquareBracketKeyword_2_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCPast__Group_2_1_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCPast__Group_2_1_0__0__Impl
	rule__DtCPast__Group_2_1_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCPast__Group_2_1_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCPastAccess().getMsgCodeKeyword_2_1_0_0()); }
	'msgCode'
	{ after(grammarAccess.getDtCPastAccess().getMsgCodeKeyword_2_1_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCPast__Group_2_1_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCPast__Group_2_1_0__1__Impl
	rule__DtCPast__Group_2_1_0__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCPast__Group_2_1_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCPastAccess().getEqualsSignKeyword_2_1_0_1()); }
	'='
	{ after(grammarAccess.getDtCPastAccess().getEqualsSignKeyword_2_1_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCPast__Group_2_1_0__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCPast__Group_2_1_0__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCPast__Group_2_1_0__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCPastAccess().getMsgCodeAssignment_2_1_0_2()); }
	(rule__DtCPast__MsgCodeAssignment_2_1_0_2)
	{ after(grammarAccess.getDtCPastAccess().getMsgCodeAssignment_2_1_0_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCPast__Group_2_1_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCPast__Group_2_1_1__0__Impl
	rule__DtCPast__Group_2_1_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCPast__Group_2_1_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCPastAccess().getMsgI18nKeyKeyword_2_1_1_0()); }
	'msgI18nKey'
	{ after(grammarAccess.getDtCPastAccess().getMsgI18nKeyKeyword_2_1_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCPast__Group_2_1_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCPast__Group_2_1_1__1__Impl
	rule__DtCPast__Group_2_1_1__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCPast__Group_2_1_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCPastAccess().getEqualsSignKeyword_2_1_1_1()); }
	'='
	{ after(grammarAccess.getDtCPastAccess().getEqualsSignKeyword_2_1_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCPast__Group_2_1_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCPast__Group_2_1_1__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCPast__Group_2_1_1__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCPastAccess().getMsgI18nKeyAssignment_2_1_1_2()); }
	(rule__DtCPast__MsgI18nKeyAssignment_2_1_1_2)
	{ after(grammarAccess.getDtCPastAccess().getMsgI18nKeyAssignment_2_1_1_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCPast__Group_2_1_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCPast__Group_2_1_2__0__Impl
	rule__DtCPast__Group_2_1_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCPast__Group_2_1_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCPastAccess().getSeverityKeyword_2_1_2_0()); }
	'severity'
	{ after(grammarAccess.getDtCPastAccess().getSeverityKeyword_2_1_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCPast__Group_2_1_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCPast__Group_2_1_2__1__Impl
	rule__DtCPast__Group_2_1_2__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCPast__Group_2_1_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCPastAccess().getEqualsSignKeyword_2_1_2_1()); }
	'='
	{ after(grammarAccess.getDtCPastAccess().getEqualsSignKeyword_2_1_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCPast__Group_2_1_2__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCPast__Group_2_1_2__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCPast__Group_2_1_2__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCPastAccess().getSeverityAssignment_2_1_2_2()); }
	(rule__DtCPast__SeverityAssignment_2_1_2_2)
	{ after(grammarAccess.getDtCPastAccess().getSeverityAssignment_2_1_2_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCNumericMax__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMax__Group__0__Impl
	rule__DtCNumericMax__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNumericMaxAccess().getLDtCNumericMaxAction_0()); }
	()
	{ after(grammarAccess.getDtCNumericMaxAccess().getLDtCNumericMaxAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMax__Group__1__Impl
	rule__DtCNumericMax__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNumericMaxAccess().getMaxNumberKeyword_1()); }
	'maxNumber'
	{ after(grammarAccess.getDtCNumericMaxAccess().getMaxNumberKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMax__Group__2__Impl
	rule__DtCNumericMax__Group__3
;
finally {
	restoreStackSize(stackSize);
}

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

rule__DtCNumericMax__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMax__Group__3__Impl
	rule__DtCNumericMax__Group__4
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNumericMaxAccess().getMaxAssignment_3()); }
	(rule__DtCNumericMax__MaxAssignment_3)
	{ after(grammarAccess.getDtCNumericMaxAccess().getMaxAssignment_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__Group__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMax__Group__4__Impl
	rule__DtCNumericMax__Group__5
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__Group__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNumericMaxAccess().getGroup_4()); }
	(rule__DtCNumericMax__Group_4__0)?
	{ after(grammarAccess.getDtCNumericMaxAccess().getGroup_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__Group__5
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMax__Group__5__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__Group__5__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNumericMaxAccess().getRightParenthesisKeyword_5()); }
	')'
	{ after(grammarAccess.getDtCNumericMaxAccess().getRightParenthesisKeyword_5()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCNumericMax__Group_4__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMax__Group_4__0__Impl
	rule__DtCNumericMax__Group_4__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__Group_4__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNumericMaxAccess().getLeftSquareBracketKeyword_4_0()); }
	'['
	{ after(grammarAccess.getDtCNumericMaxAccess().getLeftSquareBracketKeyword_4_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__Group_4__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMax__Group_4__1__Impl
	rule__DtCNumericMax__Group_4__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__Group_4__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNumericMaxAccess().getUnorderedGroup_4_1()); }
	(rule__DtCNumericMax__UnorderedGroup_4_1)
	{ after(grammarAccess.getDtCNumericMaxAccess().getUnorderedGroup_4_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__Group_4__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMax__Group_4__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__Group_4__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNumericMaxAccess().getRightSquareBracketKeyword_4_2()); }
	']'
	{ after(grammarAccess.getDtCNumericMaxAccess().getRightSquareBracketKeyword_4_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCNumericMax__Group_4_1_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMax__Group_4_1_0__0__Impl
	rule__DtCNumericMax__Group_4_1_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__Group_4_1_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNumericMaxAccess().getMsgCodeKeyword_4_1_0_0()); }
	'msgCode'
	{ after(grammarAccess.getDtCNumericMaxAccess().getMsgCodeKeyword_4_1_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__Group_4_1_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMax__Group_4_1_0__1__Impl
	rule__DtCNumericMax__Group_4_1_0__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__Group_4_1_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNumericMaxAccess().getEqualsSignKeyword_4_1_0_1()); }
	'='
	{ after(grammarAccess.getDtCNumericMaxAccess().getEqualsSignKeyword_4_1_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__Group_4_1_0__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMax__Group_4_1_0__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__Group_4_1_0__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNumericMaxAccess().getMsgCodeAssignment_4_1_0_2()); }
	(rule__DtCNumericMax__MsgCodeAssignment_4_1_0_2)
	{ after(grammarAccess.getDtCNumericMaxAccess().getMsgCodeAssignment_4_1_0_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCNumericMax__Group_4_1_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMax__Group_4_1_1__0__Impl
	rule__DtCNumericMax__Group_4_1_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__Group_4_1_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNumericMaxAccess().getMsgI18nKeyKeyword_4_1_1_0()); }
	'msgI18nKey'
	{ after(grammarAccess.getDtCNumericMaxAccess().getMsgI18nKeyKeyword_4_1_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__Group_4_1_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMax__Group_4_1_1__1__Impl
	rule__DtCNumericMax__Group_4_1_1__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__Group_4_1_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNumericMaxAccess().getEqualsSignKeyword_4_1_1_1()); }
	'='
	{ after(grammarAccess.getDtCNumericMaxAccess().getEqualsSignKeyword_4_1_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__Group_4_1_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMax__Group_4_1_1__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__Group_4_1_1__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNumericMaxAccess().getMsgI18nKeyAssignment_4_1_1_2()); }
	(rule__DtCNumericMax__MsgI18nKeyAssignment_4_1_1_2)
	{ after(grammarAccess.getDtCNumericMaxAccess().getMsgI18nKeyAssignment_4_1_1_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCNumericMax__Group_4_1_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMax__Group_4_1_2__0__Impl
	rule__DtCNumericMax__Group_4_1_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__Group_4_1_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNumericMaxAccess().getSeverityKeyword_4_1_2_0()); }
	'severity'
	{ after(grammarAccess.getDtCNumericMaxAccess().getSeverityKeyword_4_1_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__Group_4_1_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMax__Group_4_1_2__1__Impl
	rule__DtCNumericMax__Group_4_1_2__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__Group_4_1_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNumericMaxAccess().getEqualsSignKeyword_4_1_2_1()); }
	'='
	{ after(grammarAccess.getDtCNumericMaxAccess().getEqualsSignKeyword_4_1_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__Group_4_1_2__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMax__Group_4_1_2__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__Group_4_1_2__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNumericMaxAccess().getSeverityAssignment_4_1_2_2()); }
	(rule__DtCNumericMax__SeverityAssignment_4_1_2_2)
	{ after(grammarAccess.getDtCNumericMaxAccess().getSeverityAssignment_4_1_2_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCNumericMin__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMin__Group__0__Impl
	rule__DtCNumericMin__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNumericMinAccess().getLDtCNumericMinAction_0()); }
	()
	{ after(grammarAccess.getDtCNumericMinAccess().getLDtCNumericMinAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMin__Group__1__Impl
	rule__DtCNumericMin__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNumericMinAccess().getMinNumberKeyword_1()); }
	'minNumber'
	{ after(grammarAccess.getDtCNumericMinAccess().getMinNumberKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMin__Group__2__Impl
	rule__DtCNumericMin__Group__3
;
finally {
	restoreStackSize(stackSize);
}

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

rule__DtCNumericMin__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMin__Group__3__Impl
	rule__DtCNumericMin__Group__4
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNumericMinAccess().getMinAssignment_3()); }
	(rule__DtCNumericMin__MinAssignment_3)
	{ after(grammarAccess.getDtCNumericMinAccess().getMinAssignment_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__Group__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMin__Group__4__Impl
	rule__DtCNumericMin__Group__5
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__Group__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNumericMinAccess().getGroup_4()); }
	(rule__DtCNumericMin__Group_4__0)?
	{ after(grammarAccess.getDtCNumericMinAccess().getGroup_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__Group__5
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMin__Group__5__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__Group__5__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNumericMinAccess().getRightParenthesisKeyword_5()); }
	')'
	{ after(grammarAccess.getDtCNumericMinAccess().getRightParenthesisKeyword_5()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCNumericMin__Group_4__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMin__Group_4__0__Impl
	rule__DtCNumericMin__Group_4__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__Group_4__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNumericMinAccess().getLeftSquareBracketKeyword_4_0()); }
	'['
	{ after(grammarAccess.getDtCNumericMinAccess().getLeftSquareBracketKeyword_4_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__Group_4__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMin__Group_4__1__Impl
	rule__DtCNumericMin__Group_4__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__Group_4__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNumericMinAccess().getUnorderedGroup_4_1()); }
	(rule__DtCNumericMin__UnorderedGroup_4_1)
	{ after(grammarAccess.getDtCNumericMinAccess().getUnorderedGroup_4_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__Group_4__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMin__Group_4__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__Group_4__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNumericMinAccess().getRightSquareBracketKeyword_4_2()); }
	']'
	{ after(grammarAccess.getDtCNumericMinAccess().getRightSquareBracketKeyword_4_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCNumericMin__Group_4_1_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMin__Group_4_1_0__0__Impl
	rule__DtCNumericMin__Group_4_1_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__Group_4_1_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNumericMinAccess().getMsgCodeKeyword_4_1_0_0()); }
	'msgCode'
	{ after(grammarAccess.getDtCNumericMinAccess().getMsgCodeKeyword_4_1_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__Group_4_1_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMin__Group_4_1_0__1__Impl
	rule__DtCNumericMin__Group_4_1_0__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__Group_4_1_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNumericMinAccess().getEqualsSignKeyword_4_1_0_1()); }
	'='
	{ after(grammarAccess.getDtCNumericMinAccess().getEqualsSignKeyword_4_1_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__Group_4_1_0__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMin__Group_4_1_0__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__Group_4_1_0__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNumericMinAccess().getMsgCodeAssignment_4_1_0_2()); }
	(rule__DtCNumericMin__MsgCodeAssignment_4_1_0_2)
	{ after(grammarAccess.getDtCNumericMinAccess().getMsgCodeAssignment_4_1_0_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCNumericMin__Group_4_1_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMin__Group_4_1_1__0__Impl
	rule__DtCNumericMin__Group_4_1_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__Group_4_1_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNumericMinAccess().getMsgI18nKeyKeyword_4_1_1_0()); }
	'msgI18nKey'
	{ after(grammarAccess.getDtCNumericMinAccess().getMsgI18nKeyKeyword_4_1_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__Group_4_1_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMin__Group_4_1_1__1__Impl
	rule__DtCNumericMin__Group_4_1_1__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__Group_4_1_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNumericMinAccess().getEqualsSignKeyword_4_1_1_1()); }
	'='
	{ after(grammarAccess.getDtCNumericMinAccess().getEqualsSignKeyword_4_1_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__Group_4_1_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMin__Group_4_1_1__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__Group_4_1_1__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNumericMinAccess().getMsgI18nKeyAssignment_4_1_1_2()); }
	(rule__DtCNumericMin__MsgI18nKeyAssignment_4_1_1_2)
	{ after(grammarAccess.getDtCNumericMinAccess().getMsgI18nKeyAssignment_4_1_1_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCNumericMin__Group_4_1_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMin__Group_4_1_2__0__Impl
	rule__DtCNumericMin__Group_4_1_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__Group_4_1_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNumericMinAccess().getSeverityKeyword_4_1_2_0()); }
	'severity'
	{ after(grammarAccess.getDtCNumericMinAccess().getSeverityKeyword_4_1_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__Group_4_1_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMin__Group_4_1_2__1__Impl
	rule__DtCNumericMin__Group_4_1_2__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__Group_4_1_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNumericMinAccess().getEqualsSignKeyword_4_1_2_1()); }
	'='
	{ after(grammarAccess.getDtCNumericMinAccess().getEqualsSignKeyword_4_1_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__Group_4_1_2__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMin__Group_4_1_2__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__Group_4_1_2__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNumericMinAccess().getSeverityAssignment_4_1_2_2()); }
	(rule__DtCNumericMin__SeverityAssignment_4_1_2_2)
	{ after(grammarAccess.getDtCNumericMinAccess().getSeverityAssignment_4_1_2_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCNotNull__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNotNull__Group__0__Impl
	rule__DtCNotNull__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNotNull__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNotNullAccess().getLDtCNotNullAction_0()); }
	()
	{ after(grammarAccess.getDtCNotNullAccess().getLDtCNotNullAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNotNull__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNotNull__Group__1__Impl
	rule__DtCNotNull__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNotNull__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNotNullAccess().getIsNotNullKeyword_1()); }
	'isNotNull'
	{ after(grammarAccess.getDtCNotNullAccess().getIsNotNullKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNotNull__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNotNull__Group__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNotNull__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNotNullAccess().getGroup_2()); }
	(rule__DtCNotNull__Group_2__0)?
	{ after(grammarAccess.getDtCNotNullAccess().getGroup_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCNotNull__Group_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNotNull__Group_2__0__Impl
	rule__DtCNotNull__Group_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNotNull__Group_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNotNullAccess().getLeftSquareBracketKeyword_2_0()); }
	'['
	{ after(grammarAccess.getDtCNotNullAccess().getLeftSquareBracketKeyword_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNotNull__Group_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNotNull__Group_2__1__Impl
	rule__DtCNotNull__Group_2__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNotNull__Group_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNotNullAccess().getUnorderedGroup_2_1()); }
	(rule__DtCNotNull__UnorderedGroup_2_1)
	{ after(grammarAccess.getDtCNotNullAccess().getUnorderedGroup_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNotNull__Group_2__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNotNull__Group_2__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNotNull__Group_2__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNotNullAccess().getRightSquareBracketKeyword_2_2()); }
	']'
	{ after(grammarAccess.getDtCNotNullAccess().getRightSquareBracketKeyword_2_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCNotNull__Group_2_1_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNotNull__Group_2_1_0__0__Impl
	rule__DtCNotNull__Group_2_1_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNotNull__Group_2_1_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNotNullAccess().getMsgCodeKeyword_2_1_0_0()); }
	'msgCode'
	{ after(grammarAccess.getDtCNotNullAccess().getMsgCodeKeyword_2_1_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNotNull__Group_2_1_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNotNull__Group_2_1_0__1__Impl
	rule__DtCNotNull__Group_2_1_0__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNotNull__Group_2_1_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNotNullAccess().getEqualsSignKeyword_2_1_0_1()); }
	'='
	{ after(grammarAccess.getDtCNotNullAccess().getEqualsSignKeyword_2_1_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNotNull__Group_2_1_0__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNotNull__Group_2_1_0__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNotNull__Group_2_1_0__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNotNullAccess().getMsgCodeAssignment_2_1_0_2()); }
	(rule__DtCNotNull__MsgCodeAssignment_2_1_0_2)
	{ after(grammarAccess.getDtCNotNullAccess().getMsgCodeAssignment_2_1_0_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCNotNull__Group_2_1_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNotNull__Group_2_1_1__0__Impl
	rule__DtCNotNull__Group_2_1_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNotNull__Group_2_1_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNotNullAccess().getMsgI18nKeyKeyword_2_1_1_0()); }
	'msgI18nKey'
	{ after(grammarAccess.getDtCNotNullAccess().getMsgI18nKeyKeyword_2_1_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNotNull__Group_2_1_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNotNull__Group_2_1_1__1__Impl
	rule__DtCNotNull__Group_2_1_1__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNotNull__Group_2_1_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNotNullAccess().getEqualsSignKeyword_2_1_1_1()); }
	'='
	{ after(grammarAccess.getDtCNotNullAccess().getEqualsSignKeyword_2_1_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNotNull__Group_2_1_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNotNull__Group_2_1_1__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNotNull__Group_2_1_1__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNotNullAccess().getMsgI18nKeyAssignment_2_1_1_2()); }
	(rule__DtCNotNull__MsgI18nKeyAssignment_2_1_1_2)
	{ after(grammarAccess.getDtCNotNullAccess().getMsgI18nKeyAssignment_2_1_1_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCNotNull__Group_2_1_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNotNull__Group_2_1_2__0__Impl
	rule__DtCNotNull__Group_2_1_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNotNull__Group_2_1_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNotNullAccess().getSeverityKeyword_2_1_2_0()); }
	'severity'
	{ after(grammarAccess.getDtCNotNullAccess().getSeverityKeyword_2_1_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNotNull__Group_2_1_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNotNull__Group_2_1_2__1__Impl
	rule__DtCNotNull__Group_2_1_2__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNotNull__Group_2_1_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNotNullAccess().getEqualsSignKeyword_2_1_2_1()); }
	'='
	{ after(grammarAccess.getDtCNotNullAccess().getEqualsSignKeyword_2_1_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNotNull__Group_2_1_2__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNotNull__Group_2_1_2__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNotNull__Group_2_1_2__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNotNullAccess().getSeverityAssignment_2_1_2_2()); }
	(rule__DtCNotNull__SeverityAssignment_2_1_2_2)
	{ after(grammarAccess.getDtCNotNullAccess().getSeverityAssignment_2_1_2_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCNull__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNull__Group__0__Impl
	rule__DtCNull__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNull__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNullAccess().getLDtCNullAction_0()); }
	()
	{ after(grammarAccess.getDtCNullAccess().getLDtCNullAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNull__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNull__Group__1__Impl
	rule__DtCNull__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNull__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNullAccess().getIsNullKeyword_1()); }
	'isNull'
	{ after(grammarAccess.getDtCNullAccess().getIsNullKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNull__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNull__Group__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNull__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNullAccess().getGroup_2()); }
	(rule__DtCNull__Group_2__0)?
	{ after(grammarAccess.getDtCNullAccess().getGroup_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCNull__Group_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNull__Group_2__0__Impl
	rule__DtCNull__Group_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNull__Group_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNullAccess().getLeftSquareBracketKeyword_2_0()); }
	'['
	{ after(grammarAccess.getDtCNullAccess().getLeftSquareBracketKeyword_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNull__Group_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNull__Group_2__1__Impl
	rule__DtCNull__Group_2__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNull__Group_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNullAccess().getUnorderedGroup_2_1()); }
	(rule__DtCNull__UnorderedGroup_2_1)
	{ after(grammarAccess.getDtCNullAccess().getUnorderedGroup_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNull__Group_2__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNull__Group_2__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNull__Group_2__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNullAccess().getRightSquareBracketKeyword_2_2()); }
	']'
	{ after(grammarAccess.getDtCNullAccess().getRightSquareBracketKeyword_2_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCNull__Group_2_1_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNull__Group_2_1_0__0__Impl
	rule__DtCNull__Group_2_1_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNull__Group_2_1_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNullAccess().getMsgCodeKeyword_2_1_0_0()); }
	'msgCode'
	{ after(grammarAccess.getDtCNullAccess().getMsgCodeKeyword_2_1_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNull__Group_2_1_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNull__Group_2_1_0__1__Impl
	rule__DtCNull__Group_2_1_0__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNull__Group_2_1_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNullAccess().getEqualsSignKeyword_2_1_0_1()); }
	'='
	{ after(grammarAccess.getDtCNullAccess().getEqualsSignKeyword_2_1_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNull__Group_2_1_0__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNull__Group_2_1_0__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNull__Group_2_1_0__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNullAccess().getMsgCodeAssignment_2_1_0_2()); }
	(rule__DtCNull__MsgCodeAssignment_2_1_0_2)
	{ after(grammarAccess.getDtCNullAccess().getMsgCodeAssignment_2_1_0_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCNull__Group_2_1_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNull__Group_2_1_1__0__Impl
	rule__DtCNull__Group_2_1_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNull__Group_2_1_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNullAccess().getMsgI18nKeyKeyword_2_1_1_0()); }
	'msgI18nKey'
	{ after(grammarAccess.getDtCNullAccess().getMsgI18nKeyKeyword_2_1_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNull__Group_2_1_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNull__Group_2_1_1__1__Impl
	rule__DtCNull__Group_2_1_1__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNull__Group_2_1_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNullAccess().getEqualsSignKeyword_2_1_1_1()); }
	'='
	{ after(grammarAccess.getDtCNullAccess().getEqualsSignKeyword_2_1_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNull__Group_2_1_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNull__Group_2_1_1__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNull__Group_2_1_1__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNullAccess().getMsgI18nKeyAssignment_2_1_1_2()); }
	(rule__DtCNull__MsgI18nKeyAssignment_2_1_1_2)
	{ after(grammarAccess.getDtCNullAccess().getMsgI18nKeyAssignment_2_1_1_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCNull__Group_2_1_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNull__Group_2_1_2__0__Impl
	rule__DtCNull__Group_2_1_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNull__Group_2_1_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNullAccess().getSeverityKeyword_2_1_2_0()); }
	'severity'
	{ after(grammarAccess.getDtCNullAccess().getSeverityKeyword_2_1_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNull__Group_2_1_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNull__Group_2_1_2__1__Impl
	rule__DtCNull__Group_2_1_2__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNull__Group_2_1_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNullAccess().getEqualsSignKeyword_2_1_2_1()); }
	'='
	{ after(grammarAccess.getDtCNullAccess().getEqualsSignKeyword_2_1_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNull__Group_2_1_2__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNull__Group_2_1_2__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNull__Group_2_1_2__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCNullAccess().getSeverityAssignment_2_1_2_2()); }
	(rule__DtCNull__SeverityAssignment_2_1_2_2)
	{ after(grammarAccess.getDtCNullAccess().getSeverityAssignment_2_1_2_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCRegEx__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCRegEx__Group__0__Impl
	rule__DtCRegEx__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCRegEx__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCRegExAccess().getLDtCRegExAction_0()); }
	()
	{ after(grammarAccess.getDtCRegExAccess().getLDtCRegExAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCRegEx__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCRegEx__Group__1__Impl
	rule__DtCRegEx__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCRegEx__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCRegExAccess().getRegexKeyword_1()); }
	'regex'
	{ after(grammarAccess.getDtCRegExAccess().getRegexKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCRegEx__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCRegEx__Group__2__Impl
	rule__DtCRegEx__Group__3
;
finally {
	restoreStackSize(stackSize);
}

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

rule__DtCRegEx__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCRegEx__Group__3__Impl
	rule__DtCRegEx__Group__4
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCRegEx__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCRegExAccess().getPatternAssignment_3()); }
	(rule__DtCRegEx__PatternAssignment_3)
	{ after(grammarAccess.getDtCRegExAccess().getPatternAssignment_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCRegEx__Group__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCRegEx__Group__4__Impl
	rule__DtCRegEx__Group__5
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCRegEx__Group__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCRegExAccess().getGroup_4()); }
	(rule__DtCRegEx__Group_4__0)?
	{ after(grammarAccess.getDtCRegExAccess().getGroup_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCRegEx__Group__5
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCRegEx__Group__5__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCRegEx__Group__5__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCRegExAccess().getRightParenthesisKeyword_5()); }
	')'
	{ after(grammarAccess.getDtCRegExAccess().getRightParenthesisKeyword_5()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCRegEx__Group_4__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCRegEx__Group_4__0__Impl
	rule__DtCRegEx__Group_4__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCRegEx__Group_4__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCRegExAccess().getLeftSquareBracketKeyword_4_0()); }
	'['
	{ after(grammarAccess.getDtCRegExAccess().getLeftSquareBracketKeyword_4_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCRegEx__Group_4__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCRegEx__Group_4__1__Impl
	rule__DtCRegEx__Group_4__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCRegEx__Group_4__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCRegExAccess().getUnorderedGroup_4_1()); }
	(rule__DtCRegEx__UnorderedGroup_4_1)
	{ after(grammarAccess.getDtCRegExAccess().getUnorderedGroup_4_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCRegEx__Group_4__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCRegEx__Group_4__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCRegEx__Group_4__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCRegExAccess().getRightSquareBracketKeyword_4_2()); }
	']'
	{ after(grammarAccess.getDtCRegExAccess().getRightSquareBracketKeyword_4_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCRegEx__Group_4_1_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCRegEx__Group_4_1_0__0__Impl
	rule__DtCRegEx__Group_4_1_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCRegEx__Group_4_1_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCRegExAccess().getMsgCodeKeyword_4_1_0_0()); }
	'msgCode'
	{ after(grammarAccess.getDtCRegExAccess().getMsgCodeKeyword_4_1_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCRegEx__Group_4_1_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCRegEx__Group_4_1_0__1__Impl
	rule__DtCRegEx__Group_4_1_0__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCRegEx__Group_4_1_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCRegExAccess().getEqualsSignKeyword_4_1_0_1()); }
	'='
	{ after(grammarAccess.getDtCRegExAccess().getEqualsSignKeyword_4_1_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCRegEx__Group_4_1_0__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCRegEx__Group_4_1_0__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCRegEx__Group_4_1_0__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCRegExAccess().getMsgCodeAssignment_4_1_0_2()); }
	(rule__DtCRegEx__MsgCodeAssignment_4_1_0_2)
	{ after(grammarAccess.getDtCRegExAccess().getMsgCodeAssignment_4_1_0_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCRegEx__Group_4_1_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCRegEx__Group_4_1_1__0__Impl
	rule__DtCRegEx__Group_4_1_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCRegEx__Group_4_1_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCRegExAccess().getMsgI18nKeyKeyword_4_1_1_0()); }
	'msgI18nKey'
	{ after(grammarAccess.getDtCRegExAccess().getMsgI18nKeyKeyword_4_1_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCRegEx__Group_4_1_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCRegEx__Group_4_1_1__1__Impl
	rule__DtCRegEx__Group_4_1_1__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCRegEx__Group_4_1_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCRegExAccess().getEqualsSignKeyword_4_1_1_1()); }
	'='
	{ after(grammarAccess.getDtCRegExAccess().getEqualsSignKeyword_4_1_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCRegEx__Group_4_1_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCRegEx__Group_4_1_1__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCRegEx__Group_4_1_1__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCRegExAccess().getMsgI18nKeyAssignment_4_1_1_2()); }
	(rule__DtCRegEx__MsgI18nKeyAssignment_4_1_1_2)
	{ after(grammarAccess.getDtCRegExAccess().getMsgI18nKeyAssignment_4_1_1_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCRegEx__Group_4_1_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCRegEx__Group_4_1_2__0__Impl
	rule__DtCRegEx__Group_4_1_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCRegEx__Group_4_1_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCRegExAccess().getSeverityKeyword_4_1_2_0()); }
	'severity'
	{ after(grammarAccess.getDtCRegExAccess().getSeverityKeyword_4_1_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCRegEx__Group_4_1_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCRegEx__Group_4_1_2__1__Impl
	rule__DtCRegEx__Group_4_1_2__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCRegEx__Group_4_1_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCRegExAccess().getEqualsSignKeyword_4_1_2_1()); }
	'='
	{ after(grammarAccess.getDtCRegExAccess().getEqualsSignKeyword_4_1_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCRegEx__Group_4_1_2__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCRegEx__Group_4_1_2__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCRegEx__Group_4_1_2__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCRegExAccess().getSeverityAssignment_4_1_2_2()); }
	(rule__DtCRegEx__SeverityAssignment_4_1_2_2)
	{ after(grammarAccess.getDtCRegExAccess().getSeverityAssignment_4_1_2_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCSize__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCSize__Group__0__Impl
	rule__DtCSize__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCSizeAccess().getLDtCSizeAction_0()); }
	()
	{ after(grammarAccess.getDtCSizeAccess().getLDtCSizeAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCSize__Group__1__Impl
	rule__DtCSize__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCSizeAccess().getMinMaxSizeKeyword_1()); }
	'minMaxSize'
	{ after(grammarAccess.getDtCSizeAccess().getMinMaxSizeKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCSize__Group__2__Impl
	rule__DtCSize__Group__3
;
finally {
	restoreStackSize(stackSize);
}

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

rule__DtCSize__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCSize__Group__3__Impl
	rule__DtCSize__Group__4
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCSizeAccess().getMinAssignment_3()); }
	(rule__DtCSize__MinAssignment_3)
	{ after(grammarAccess.getDtCSizeAccess().getMinAssignment_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__Group__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCSize__Group__4__Impl
	rule__DtCSize__Group__5
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__Group__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCSizeAccess().getCommaKeyword_4()); }
	','
	{ after(grammarAccess.getDtCSizeAccess().getCommaKeyword_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__Group__5
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCSize__Group__5__Impl
	rule__DtCSize__Group__6
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__Group__5__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCSizeAccess().getMaxAssignment_5()); }
	(rule__DtCSize__MaxAssignment_5)
	{ after(grammarAccess.getDtCSizeAccess().getMaxAssignment_5()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__Group__6
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCSize__Group__6__Impl
	rule__DtCSize__Group__7
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__Group__6__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCSizeAccess().getGroup_6()); }
	(rule__DtCSize__Group_6__0)?
	{ after(grammarAccess.getDtCSizeAccess().getGroup_6()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__Group__7
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCSize__Group__7__Impl
;
finally {
	restoreStackSize(stackSize);
}

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


rule__DtCSize__Group_6__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCSize__Group_6__0__Impl
	rule__DtCSize__Group_6__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__Group_6__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCSizeAccess().getLeftSquareBracketKeyword_6_0()); }
	'['
	{ after(grammarAccess.getDtCSizeAccess().getLeftSquareBracketKeyword_6_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__Group_6__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCSize__Group_6__1__Impl
	rule__DtCSize__Group_6__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__Group_6__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCSizeAccess().getUnorderedGroup_6_1()); }
	(rule__DtCSize__UnorderedGroup_6_1)
	{ after(grammarAccess.getDtCSizeAccess().getUnorderedGroup_6_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__Group_6__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCSize__Group_6__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__Group_6__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCSizeAccess().getRightSquareBracketKeyword_6_2()); }
	']'
	{ after(grammarAccess.getDtCSizeAccess().getRightSquareBracketKeyword_6_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCSize__Group_6_1_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCSize__Group_6_1_0__0__Impl
	rule__DtCSize__Group_6_1_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__Group_6_1_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCSizeAccess().getMsgCodeKeyword_6_1_0_0()); }
	'msgCode'
	{ after(grammarAccess.getDtCSizeAccess().getMsgCodeKeyword_6_1_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__Group_6_1_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCSize__Group_6_1_0__1__Impl
	rule__DtCSize__Group_6_1_0__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__Group_6_1_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCSizeAccess().getEqualsSignKeyword_6_1_0_1()); }
	'='
	{ after(grammarAccess.getDtCSizeAccess().getEqualsSignKeyword_6_1_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__Group_6_1_0__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCSize__Group_6_1_0__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__Group_6_1_0__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCSizeAccess().getMsgCodeAssignment_6_1_0_2()); }
	(rule__DtCSize__MsgCodeAssignment_6_1_0_2)
	{ after(grammarAccess.getDtCSizeAccess().getMsgCodeAssignment_6_1_0_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCSize__Group_6_1_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCSize__Group_6_1_1__0__Impl
	rule__DtCSize__Group_6_1_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__Group_6_1_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCSizeAccess().getMsgI18nKeyKeyword_6_1_1_0()); }
	'msgI18nKey'
	{ after(grammarAccess.getDtCSizeAccess().getMsgI18nKeyKeyword_6_1_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__Group_6_1_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCSize__Group_6_1_1__1__Impl
	rule__DtCSize__Group_6_1_1__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__Group_6_1_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCSizeAccess().getEqualsSignKeyword_6_1_1_1()); }
	'='
	{ after(grammarAccess.getDtCSizeAccess().getEqualsSignKeyword_6_1_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__Group_6_1_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCSize__Group_6_1_1__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__Group_6_1_1__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCSizeAccess().getMsgI18nKeyAssignment_6_1_1_2()); }
	(rule__DtCSize__MsgI18nKeyAssignment_6_1_1_2)
	{ after(grammarAccess.getDtCSizeAccess().getMsgI18nKeyAssignment_6_1_1_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCSize__Group_6_1_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCSize__Group_6_1_2__0__Impl
	rule__DtCSize__Group_6_1_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__Group_6_1_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCSizeAccess().getSeverityKeyword_6_1_2_0()); }
	'severity'
	{ after(grammarAccess.getDtCSizeAccess().getSeverityKeyword_6_1_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__Group_6_1_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCSize__Group_6_1_2__1__Impl
	rule__DtCSize__Group_6_1_2__2
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__Group_6_1_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCSizeAccess().getEqualsSignKeyword_6_1_2_1()); }
	'='
	{ after(grammarAccess.getDtCSizeAccess().getEqualsSignKeyword_6_1_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__Group_6_1_2__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCSize__Group_6_1_2__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__Group_6_1_2__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getDtCSizeAccess().getSeverityAssignment_6_1_2_2()); }
	(rule__DtCSize__SeverityAssignment_6_1_2_2)
	{ after(grammarAccess.getDtCSizeAccess().getSeverityAssignment_6_1_2_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__Enum__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Enum__Group__0__Impl
	rule__Enum__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__Enum__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEnumAccess().getEnumKeyword_0()); }
	'enum'
	{ after(grammarAccess.getEnumAccess().getEnumKeyword_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Enum__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Enum__Group__1__Impl
	rule__Enum__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__Enum__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEnumAccess().getNameAssignment_1()); }
	(rule__Enum__NameAssignment_1)
	{ after(grammarAccess.getEnumAccess().getNameAssignment_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Enum__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Enum__Group__2__Impl
	rule__Enum__Group__3
;
finally {
	restoreStackSize(stackSize);
}

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

rule__Enum__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Enum__Group__3__Impl
	rule__Enum__Group__4
;
finally {
	restoreStackSize(stackSize);
}

rule__Enum__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEnumAccess().getLiteralsAssignment_3()); }
	(rule__Enum__LiteralsAssignment_3)
	{ after(grammarAccess.getEnumAccess().getLiteralsAssignment_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Enum__Group__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Enum__Group__4__Impl
	rule__Enum__Group__5
;
finally {
	restoreStackSize(stackSize);
}

rule__Enum__Group__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEnumAccess().getGroup_4()); }
	(rule__Enum__Group_4__0)*
	{ after(grammarAccess.getEnumAccess().getGroup_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Enum__Group__5
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Enum__Group__5__Impl
;
finally {
	restoreStackSize(stackSize);
}

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


rule__Enum__Group_4__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Enum__Group_4__0__Impl
	rule__Enum__Group_4__1
;
finally {
	restoreStackSize(stackSize);
}

rule__Enum__Group_4__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEnumAccess().getCommaKeyword_4_0()); }
	','
	{ after(grammarAccess.getEnumAccess().getCommaKeyword_4_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Enum__Group_4__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Enum__Group_4__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__Enum__Group_4__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEnumAccess().getLiteralsAssignment_4_1()); }
	(rule__Enum__LiteralsAssignment_4_1)
	{ after(grammarAccess.getEnumAccess().getLiteralsAssignment_4_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EnumLiteral__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EnumLiteral__Group__0__Impl
	rule__EnumLiteral__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EnumLiteral__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEnumLiteralAccess().getNameAssignment_0()); }
	(rule__EnumLiteral__NameAssignment_0)
	{ after(grammarAccess.getEnumLiteralAccess().getNameAssignment_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EnumLiteral__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EnumLiteral__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EnumLiteral__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEnumLiteralAccess().getUnorderedGroup_1()); }
	(rule__EnumLiteral__UnorderedGroup_1)?
	{ after(grammarAccess.getEnumLiteralAccess().getUnorderedGroup_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EnumLiteral__Group_1_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EnumLiteral__Group_1_0__0__Impl
	rule__EnumLiteral__Group_1_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EnumLiteral__Group_1_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEnumLiteralAccess().getLeftParenthesisKeyword_1_0_0()); }
	'('
	{ after(grammarAccess.getEnumLiteralAccess().getLeftParenthesisKeyword_1_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EnumLiteral__Group_1_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EnumLiteral__Group_1_0__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EnumLiteral__Group_1_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEnumLiteralAccess().getDefaultAssignment_1_0_1()); }
	(rule__EnumLiteral__DefaultAssignment_1_0_1)?
	{ after(grammarAccess.getEnumLiteralAccess().getDefaultAssignment_1_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EnumLiteral__Group_1_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EnumLiteral__Group_1_1__0__Impl
	rule__EnumLiteral__Group_1_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EnumLiteral__Group_1_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEnumLiteralAccess().getNullAssignment_1_1_0()); }
	(rule__EnumLiteral__NullAssignment_1_1_0)?
	{ after(grammarAccess.getEnumLiteralAccess().getNullAssignment_1_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EnumLiteral__Group_1_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EnumLiteral__Group_1_1__1__Impl
	rule__EnumLiteral__Group_1_1__2
;
finally {
	restoreStackSize(stackSize);
}

rule__EnumLiteral__Group_1_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEnumLiteralAccess().getRightParenthesisKeyword_1_1_1()); }
	')'
	{ after(grammarAccess.getEnumLiteralAccess().getRightParenthesisKeyword_1_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EnumLiteral__Group_1_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EnumLiteral__Group_1_1__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EnumLiteral__Group_1_1__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEnumLiteralAccess().getGroup_1_1_2()); }
	(rule__EnumLiteral__Group_1_1_2__0)?
	{ after(grammarAccess.getEnumLiteralAccess().getGroup_1_1_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__EnumLiteral__Group_1_1_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EnumLiteral__Group_1_1_2__0__Impl
	rule__EnumLiteral__Group_1_1_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__EnumLiteral__Group_1_1_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEnumLiteralAccess().getEqualsSignKeyword_1_1_2_0()); }
	'='
	{ after(grammarAccess.getEnumLiteralAccess().getEqualsSignKeyword_1_1_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__EnumLiteral__Group_1_1_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EnumLiteral__Group_1_1_2__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__EnumLiteral__Group_1_1_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getEnumLiteralAccess().getValueAssignment_1_1_2_1()); }
	(rule__EnumLiteral__ValueAssignment_1_1_2_1)
	{ after(grammarAccess.getEnumLiteralAccess().getValueAssignment_1_1_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__AnnotationDef__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__AnnotationDef__Group__0__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__AnnotationDef__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getAnnotationDefAccess().getAnnotationAssignment_0()); }
	(rule__AnnotationDef__AnnotationAssignment_0)
	{ after(grammarAccess.getAnnotationDefAccess().getAnnotationAssignment_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__ResultFilters__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__ResultFilters__Group__0__Impl
	rule__ResultFilters__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__ResultFilters__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getResultFiltersAccess().getLResultFiltersAction_0()); }
	()
	{ after(grammarAccess.getResultFiltersAccess().getLResultFiltersAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__ResultFilters__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__ResultFilters__Group__1__Impl
	rule__ResultFilters__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__ResultFilters__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getResultFiltersAccess().getFilterKeyword_1()); }
	'filter'
	{ after(grammarAccess.getResultFiltersAccess().getFilterKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__ResultFilters__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__ResultFilters__Group__2__Impl
	rule__ResultFilters__Group__3
;
finally {
	restoreStackSize(stackSize);
}

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

rule__ResultFilters__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__ResultFilters__Group__3__Impl
	rule__ResultFilters__Group__4
;
finally {
	restoreStackSize(stackSize);
}

rule__ResultFilters__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getResultFiltersAccess().getResultFiltersAssignment_3()); }
	(rule__ResultFilters__ResultFiltersAssignment_3)*
	{ after(grammarAccess.getResultFiltersAccess().getResultFiltersAssignment_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__ResultFilters__Group__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__ResultFilters__Group__4__Impl
;
finally {
	restoreStackSize(stackSize);
}

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


rule__AttributeMatchingConstraint__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__AttributeMatchingConstraint__Group__0__Impl
	rule__AttributeMatchingConstraint__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__AttributeMatchingConstraint__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getAttributeMatchingConstraintAccess().getAttributeAssignment_0()); }
	(rule__AttributeMatchingConstraint__AttributeAssignment_0)
	{ after(grammarAccess.getAttributeMatchingConstraintAccess().getAttributeAssignment_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__AttributeMatchingConstraint__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__AttributeMatchingConstraint__Group__1__Impl
	rule__AttributeMatchingConstraint__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__AttributeMatchingConstraint__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getAttributeMatchingConstraintAccess().getComparatorTypeAssignment_1()); }
	(rule__AttributeMatchingConstraint__ComparatorTypeAssignment_1)
	{ after(grammarAccess.getAttributeMatchingConstraintAccess().getComparatorTypeAssignment_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__AttributeMatchingConstraint__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__AttributeMatchingConstraint__Group__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__AttributeMatchingConstraint__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getAttributeMatchingConstraintAccess().getAlternatives_2()); }
	(rule__AttributeMatchingConstraint__Alternatives_2)
	{ after(grammarAccess.getAttributeMatchingConstraintAccess().getAlternatives_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__KeyAndValue__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__KeyAndValue__Group__0__Impl
	rule__KeyAndValue__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__KeyAndValue__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getKeyAndValueAccess().getKeyKeyword_0()); }
	'key'
	{ after(grammarAccess.getKeyAndValueAccess().getKeyKeyword_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__KeyAndValue__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__KeyAndValue__Group__1__Impl
	rule__KeyAndValue__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__KeyAndValue__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getKeyAndValueAccess().getEqualsSignKeyword_1()); }
	'='
	{ after(grammarAccess.getKeyAndValueAccess().getEqualsSignKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__KeyAndValue__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__KeyAndValue__Group__2__Impl
	rule__KeyAndValue__Group__3
;
finally {
	restoreStackSize(stackSize);
}

rule__KeyAndValue__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getKeyAndValueAccess().getKeyAssignment_2()); }
	(rule__KeyAndValue__KeyAssignment_2)
	{ after(grammarAccess.getKeyAndValueAccess().getKeyAssignment_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__KeyAndValue__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__KeyAndValue__Group__3__Impl
	rule__KeyAndValue__Group__4
;
finally {
	restoreStackSize(stackSize);
}

rule__KeyAndValue__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getKeyAndValueAccess().getValueKeyword_3()); }
	'value'
	{ after(grammarAccess.getKeyAndValueAccess().getValueKeyword_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__KeyAndValue__Group__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__KeyAndValue__Group__4__Impl
	rule__KeyAndValue__Group__5
;
finally {
	restoreStackSize(stackSize);
}

rule__KeyAndValue__Group__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getKeyAndValueAccess().getEqualsSignKeyword_4()); }
	'='
	{ after(grammarAccess.getKeyAndValueAccess().getEqualsSignKeyword_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__KeyAndValue__Group__5
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__KeyAndValue__Group__5__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__KeyAndValue__Group__5__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getKeyAndValueAccess().getValueAssignment_5()); }
	(rule__KeyAndValue__ValueAssignment_5)
	{ after(grammarAccess.getKeyAndValueAccess().getValueAssignment_5()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__LFQN__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__LFQN__Group__0__Impl
	rule__LFQN__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__LFQN__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getLFQNAccess().getIDTerminalRuleCall_0()); }
	RULE_ID
	{ after(grammarAccess.getLFQNAccess().getIDTerminalRuleCall_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__LFQN__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__LFQN__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__LFQN__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getLFQNAccess().getGroup_1()); }
	(rule__LFQN__Group_1__0)*
	{ after(grammarAccess.getLFQNAccess().getGroup_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__LFQN__Group_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__LFQN__Group_1__0__Impl
	rule__LFQN__Group_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__LFQN__Group_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getLFQNAccess().getFullStopKeyword_1_0()); }
	'.'
	{ after(grammarAccess.getLFQNAccess().getFullStopKeyword_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__LFQN__Group_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__LFQN__Group_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__LFQN__Group_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getLFQNAccess().getIDTerminalRuleCall_1_1()); }
	RULE_ID
	{ after(grammarAccess.getLFQNAccess().getIDTerminalRuleCall_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__Multiplicity__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Multiplicity__Group__0__Impl
	rule__Multiplicity__Group__1
;
finally {
	restoreStackSize(stackSize);
}

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

rule__Multiplicity__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Multiplicity__Group__1__Impl
	rule__Multiplicity__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__Multiplicity__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getMultiplicityAccess().getLowerAssignment_1()); }
	(rule__Multiplicity__LowerAssignment_1)
	{ after(grammarAccess.getMultiplicityAccess().getLowerAssignment_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Multiplicity__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Multiplicity__Group__2__Impl
	rule__Multiplicity__Group__3
;
finally {
	restoreStackSize(stackSize);
}

rule__Multiplicity__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getMultiplicityAccess().getGroup_2()); }
	(rule__Multiplicity__Group_2__0)?
	{ after(grammarAccess.getMultiplicityAccess().getGroup_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Multiplicity__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Multiplicity__Group__3__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__Multiplicity__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getMultiplicityAccess().getRightSquareBracketKeyword_3()); }
	']'
	{ after(grammarAccess.getMultiplicityAccess().getRightSquareBracketKeyword_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__Multiplicity__Group_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Multiplicity__Group_2__0__Impl
	rule__Multiplicity__Group_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__Multiplicity__Group_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getMultiplicityAccess().getFullStopFullStopKeyword_2_0()); }
	'..'
	{ after(grammarAccess.getMultiplicityAccess().getFullStopFullStopKeyword_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Multiplicity__Group_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Multiplicity__Group_2__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__Multiplicity__Group_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getMultiplicityAccess().getUpperAssignment_2_1()); }
	(rule__Multiplicity__UpperAssignment_2_1)
	{ after(grammarAccess.getMultiplicityAccess().getUpperAssignment_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__LInt__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__LInt__Group__0__Impl
	rule__LInt__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__LInt__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getLIntAccess().getAlternatives_0()); }
	(rule__LInt__Alternatives_0)?
	{ after(grammarAccess.getLIntAccess().getAlternatives_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__LInt__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__LInt__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__LInt__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getLIntAccess().getINTTerminalRuleCall_1()); }
	RULE_INT
	{ after(grammarAccess.getLIntAccess().getINTTerminalRuleCall_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__LDecimal__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__LDecimal__Group__0__Impl
	rule__LDecimal__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__LDecimal__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getLDecimalAccess().getLIntParserRuleCall_0()); }
	ruleLInt
	{ after(grammarAccess.getLDecimalAccess().getLIntParserRuleCall_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__LDecimal__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__LDecimal__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__LDecimal__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getLDecimalAccess().getGroup_1()); }
	(rule__LDecimal__Group_1__0)?
	{ after(grammarAccess.getLDecimalAccess().getGroup_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__LDecimal__Group_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__LDecimal__Group_1__0__Impl
	rule__LDecimal__Group_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__LDecimal__Group_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getLDecimalAccess().getFullStopKeyword_1_0()); }
	'.'
	{ after(grammarAccess.getLDecimalAccess().getFullStopKeyword_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__LDecimal__Group_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__LDecimal__Group_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__LDecimal__Group_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getLDecimalAccess().getINTTerminalRuleCall_1_1()); }
	RULE_INT
	{ after(grammarAccess.getLDecimalAccess().getINTTerminalRuleCall_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XImportDeclaration__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XImportDeclaration__Group__0__Impl
	rule__XImportDeclaration__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XImportDeclaration__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXImportDeclarationAccess().getOXImportDeclarationAction_0()); }
	()
	{ after(grammarAccess.getXImportDeclarationAccess().getOXImportDeclarationAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XImportDeclaration__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XImportDeclaration__Group__1__Impl
	rule__XImportDeclaration__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XImportDeclaration__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXImportDeclarationAccess().getImportKeyword_1()); }
	'import'
	{ after(grammarAccess.getXImportDeclarationAccess().getImportKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XImportDeclaration__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XImportDeclaration__Group__2__Impl
	rule__XImportDeclaration__Group__3
;
finally {
	restoreStackSize(stackSize);
}

rule__XImportDeclaration__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXImportDeclarationAccess().getAlternatives_2()); }
	(rule__XImportDeclaration__Alternatives_2)
	{ after(grammarAccess.getXImportDeclarationAccess().getAlternatives_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XImportDeclaration__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XImportDeclaration__Group__3__Impl
;
finally {
	restoreStackSize(stackSize);
}

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


rule__XImportDeclaration__Group_2_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XImportDeclaration__Group_2_0__0__Impl
	rule__XImportDeclaration__Group_2_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XImportDeclaration__Group_2_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXImportDeclarationAccess().getStaticAssignment_2_0_0()); }
	(rule__XImportDeclaration__StaticAssignment_2_0_0)
	{ after(grammarAccess.getXImportDeclarationAccess().getStaticAssignment_2_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XImportDeclaration__Group_2_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XImportDeclaration__Group_2_0__1__Impl
	rule__XImportDeclaration__Group_2_0__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XImportDeclaration__Group_2_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXImportDeclarationAccess().getExtensionAssignment_2_0_1()); }
	(rule__XImportDeclaration__ExtensionAssignment_2_0_1)?
	{ after(grammarAccess.getXImportDeclarationAccess().getExtensionAssignment_2_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XImportDeclaration__Group_2_0__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XImportDeclaration__Group_2_0__2__Impl
	rule__XImportDeclaration__Group_2_0__3
;
finally {
	restoreStackSize(stackSize);
}

rule__XImportDeclaration__Group_2_0__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXImportDeclarationAccess().getImportedTypeAssignment_2_0_2()); }
	(rule__XImportDeclaration__ImportedTypeAssignment_2_0_2)
	{ after(grammarAccess.getXImportDeclarationAccess().getImportedTypeAssignment_2_0_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XImportDeclaration__Group_2_0__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XImportDeclaration__Group_2_0__3__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XImportDeclaration__Group_2_0__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXImportDeclarationAccess().getAlternatives_2_0_3()); }
	(rule__XImportDeclaration__Alternatives_2_0_3)
	{ after(grammarAccess.getXImportDeclarationAccess().getAlternatives_2_0_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XImportDeclaration__Group_2_3__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XImportDeclaration__Group_2_3__0__Impl
	rule__XImportDeclaration__Group_2_3__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XImportDeclaration__Group_2_3__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXImportDeclarationAccess().getFqnImportAssignment_2_3_0()); }
	(rule__XImportDeclaration__FqnImportAssignment_2_3_0)
	{ after(grammarAccess.getXImportDeclarationAccess().getFqnImportAssignment_2_3_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XImportDeclaration__Group_2_3__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XImportDeclaration__Group_2_3__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XImportDeclaration__Group_2_3__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXImportDeclarationAccess().getImportedFullyQualifiedNameAssignment_2_3_1()); }
	(rule__XImportDeclaration__ImportedFullyQualifiedNameAssignment_2_3_1)
	{ after(grammarAccess.getXImportDeclarationAccess().getImportedFullyQualifiedNameAssignment_2_3_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XAnnotation__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotation__Group__0__Impl
	rule__XAnnotation__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotation__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationAccess().getXAnnotationAction_0()); }
	()
	{ after(grammarAccess.getXAnnotationAccess().getXAnnotationAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotation__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotation__Group__1__Impl
	rule__XAnnotation__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotation__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationAccess().getCommercialAtKeyword_1()); }
	'@'
	{ after(grammarAccess.getXAnnotationAccess().getCommercialAtKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotation__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotation__Group__2__Impl
	rule__XAnnotation__Group__3
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotation__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationAccess().getAnnotationTypeAssignment_2()); }
	(rule__XAnnotation__AnnotationTypeAssignment_2)
	{ after(grammarAccess.getXAnnotationAccess().getAnnotationTypeAssignment_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotation__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotation__Group__3__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotation__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationAccess().getGroup_3()); }
	(rule__XAnnotation__Group_3__0)?
	{ after(grammarAccess.getXAnnotationAccess().getGroup_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XAnnotation__Group_3__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotation__Group_3__0__Impl
	rule__XAnnotation__Group_3__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotation__Group_3__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationAccess().getLeftParenthesisKeyword_3_0()); }
	('(')
	{ after(grammarAccess.getXAnnotationAccess().getLeftParenthesisKeyword_3_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotation__Group_3__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotation__Group_3__1__Impl
	rule__XAnnotation__Group_3__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotation__Group_3__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationAccess().getAlternatives_3_1()); }
	(rule__XAnnotation__Alternatives_3_1)?
	{ after(grammarAccess.getXAnnotationAccess().getAlternatives_3_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotation__Group_3__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotation__Group_3__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotation__Group_3__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationAccess().getRightParenthesisKeyword_3_2()); }
	')'
	{ after(grammarAccess.getXAnnotationAccess().getRightParenthesisKeyword_3_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XAnnotation__Group_3_1_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotation__Group_3_1_0__0__Impl
	rule__XAnnotation__Group_3_1_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotation__Group_3_1_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationAccess().getElementValuePairsAssignment_3_1_0_0()); }
	(rule__XAnnotation__ElementValuePairsAssignment_3_1_0_0)
	{ after(grammarAccess.getXAnnotationAccess().getElementValuePairsAssignment_3_1_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotation__Group_3_1_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotation__Group_3_1_0__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotation__Group_3_1_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationAccess().getGroup_3_1_0_1()); }
	(rule__XAnnotation__Group_3_1_0_1__0)*
	{ after(grammarAccess.getXAnnotationAccess().getGroup_3_1_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XAnnotation__Group_3_1_0_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotation__Group_3_1_0_1__0__Impl
	rule__XAnnotation__Group_3_1_0_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotation__Group_3_1_0_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationAccess().getCommaKeyword_3_1_0_1_0()); }
	','
	{ after(grammarAccess.getXAnnotationAccess().getCommaKeyword_3_1_0_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotation__Group_3_1_0_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotation__Group_3_1_0_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotation__Group_3_1_0_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationAccess().getElementValuePairsAssignment_3_1_0_1_1()); }
	(rule__XAnnotation__ElementValuePairsAssignment_3_1_0_1_1)
	{ after(grammarAccess.getXAnnotationAccess().getElementValuePairsAssignment_3_1_0_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XAnnotationElementValuePair__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotationElementValuePair__Group__0__Impl
	rule__XAnnotationElementValuePair__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValuePair__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationElementValuePairAccess().getGroup_0()); }
	(rule__XAnnotationElementValuePair__Group_0__0)
	{ after(grammarAccess.getXAnnotationElementValuePairAccess().getGroup_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValuePair__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotationElementValuePair__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValuePair__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationElementValuePairAccess().getValueAssignment_1()); }
	(rule__XAnnotationElementValuePair__ValueAssignment_1)
	{ after(grammarAccess.getXAnnotationElementValuePairAccess().getValueAssignment_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XAnnotationElementValuePair__Group_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotationElementValuePair__Group_0__0__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValuePair__Group_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationElementValuePairAccess().getGroup_0_0()); }
	(rule__XAnnotationElementValuePair__Group_0_0__0)
	{ after(grammarAccess.getXAnnotationElementValuePairAccess().getGroup_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XAnnotationElementValuePair__Group_0_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotationElementValuePair__Group_0_0__0__Impl
	rule__XAnnotationElementValuePair__Group_0_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValuePair__Group_0_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationElementValuePairAccess().getElementAssignment_0_0_0()); }
	(rule__XAnnotationElementValuePair__ElementAssignment_0_0_0)
	{ after(grammarAccess.getXAnnotationElementValuePairAccess().getElementAssignment_0_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValuePair__Group_0_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotationElementValuePair__Group_0_0__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValuePair__Group_0_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationElementValuePairAccess().getEqualsSignKeyword_0_0_1()); }
	'='
	{ after(grammarAccess.getXAnnotationElementValuePairAccess().getEqualsSignKeyword_0_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XAnnotationElementValueOrCommaList__Group_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotationElementValueOrCommaList__Group_0__0__Impl
	rule__XAnnotationElementValueOrCommaList__Group_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValueOrCommaList__Group_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getGroup_0_0()); }
	(rule__XAnnotationElementValueOrCommaList__Group_0_0__0)
	{ after(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getGroup_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValueOrCommaList__Group_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotationElementValueOrCommaList__Group_0__1__Impl
	rule__XAnnotationElementValueOrCommaList__Group_0__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValueOrCommaList__Group_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getGroup_0_1()); }
	(rule__XAnnotationElementValueOrCommaList__Group_0_1__0)?
	{ after(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getGroup_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValueOrCommaList__Group_0__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotationElementValueOrCommaList__Group_0__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValueOrCommaList__Group_0__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getRightSquareBracketKeyword_0_2()); }
	']'
	{ after(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getRightSquareBracketKeyword_0_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XAnnotationElementValueOrCommaList__Group_0_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotationElementValueOrCommaList__Group_0_0__0__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValueOrCommaList__Group_0_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getGroup_0_0_0()); }
	(rule__XAnnotationElementValueOrCommaList__Group_0_0_0__0)
	{ after(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getGroup_0_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XAnnotationElementValueOrCommaList__Group_0_0_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotationElementValueOrCommaList__Group_0_0_0__0__Impl
	rule__XAnnotationElementValueOrCommaList__Group_0_0_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValueOrCommaList__Group_0_0_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getXListLiteralAction_0_0_0_0()); }
	()
	{ after(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getXListLiteralAction_0_0_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValueOrCommaList__Group_0_0_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotationElementValueOrCommaList__Group_0_0_0__1__Impl
	rule__XAnnotationElementValueOrCommaList__Group_0_0_0__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValueOrCommaList__Group_0_0_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getNumberSignKeyword_0_0_0_1()); }
	'#'
	{ after(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getNumberSignKeyword_0_0_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValueOrCommaList__Group_0_0_0__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotationElementValueOrCommaList__Group_0_0_0__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValueOrCommaList__Group_0_0_0__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getLeftSquareBracketKeyword_0_0_0_2()); }
	'['
	{ after(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getLeftSquareBracketKeyword_0_0_0_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XAnnotationElementValueOrCommaList__Group_0_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotationElementValueOrCommaList__Group_0_1__0__Impl
	rule__XAnnotationElementValueOrCommaList__Group_0_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValueOrCommaList__Group_0_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getElementsAssignment_0_1_0()); }
	(rule__XAnnotationElementValueOrCommaList__ElementsAssignment_0_1_0)
	{ after(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getElementsAssignment_0_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValueOrCommaList__Group_0_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotationElementValueOrCommaList__Group_0_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValueOrCommaList__Group_0_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getGroup_0_1_1()); }
	(rule__XAnnotationElementValueOrCommaList__Group_0_1_1__0)*
	{ after(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getGroup_0_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XAnnotationElementValueOrCommaList__Group_0_1_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotationElementValueOrCommaList__Group_0_1_1__0__Impl
	rule__XAnnotationElementValueOrCommaList__Group_0_1_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValueOrCommaList__Group_0_1_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getCommaKeyword_0_1_1_0()); }
	','
	{ after(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getCommaKeyword_0_1_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValueOrCommaList__Group_0_1_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotationElementValueOrCommaList__Group_0_1_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValueOrCommaList__Group_0_1_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getElementsAssignment_0_1_1_1()); }
	(rule__XAnnotationElementValueOrCommaList__ElementsAssignment_0_1_1_1)
	{ after(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getElementsAssignment_0_1_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XAnnotationElementValueOrCommaList__Group_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotationElementValueOrCommaList__Group_1__0__Impl
	rule__XAnnotationElementValueOrCommaList__Group_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValueOrCommaList__Group_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getXAnnotationOrExpressionParserRuleCall_1_0()); }
	ruleXAnnotationOrExpression
	{ after(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getXAnnotationOrExpressionParserRuleCall_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValueOrCommaList__Group_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotationElementValueOrCommaList__Group_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValueOrCommaList__Group_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getGroup_1_1()); }
	(rule__XAnnotationElementValueOrCommaList__Group_1_1__0)?
	{ after(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getGroup_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XAnnotationElementValueOrCommaList__Group_1_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotationElementValueOrCommaList__Group_1_1__0__Impl
	rule__XAnnotationElementValueOrCommaList__Group_1_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValueOrCommaList__Group_1_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getXListLiteralElementsAction_1_1_0()); }
	()
	{ after(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getXListLiteralElementsAction_1_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValueOrCommaList__Group_1_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotationElementValueOrCommaList__Group_1_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValueOrCommaList__Group_1_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	(
		{ before(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getGroup_1_1_1()); }
		(rule__XAnnotationElementValueOrCommaList__Group_1_1_1__0)
		{ after(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getGroup_1_1_1()); }
	)
	(
		{ before(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getGroup_1_1_1()); }
		(rule__XAnnotationElementValueOrCommaList__Group_1_1_1__0)*
		{ after(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getGroup_1_1_1()); }
	)
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XAnnotationElementValueOrCommaList__Group_1_1_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotationElementValueOrCommaList__Group_1_1_1__0__Impl
	rule__XAnnotationElementValueOrCommaList__Group_1_1_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValueOrCommaList__Group_1_1_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getCommaKeyword_1_1_1_0()); }
	','
	{ after(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getCommaKeyword_1_1_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValueOrCommaList__Group_1_1_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotationElementValueOrCommaList__Group_1_1_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValueOrCommaList__Group_1_1_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getElementsAssignment_1_1_1_1()); }
	(rule__XAnnotationElementValueOrCommaList__ElementsAssignment_1_1_1_1)
	{ after(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getElementsAssignment_1_1_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XAnnotationElementValue__Group_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotationElementValue__Group_0__0__Impl
	rule__XAnnotationElementValue__Group_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValue__Group_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationElementValueAccess().getGroup_0_0()); }
	(rule__XAnnotationElementValue__Group_0_0__0)
	{ after(grammarAccess.getXAnnotationElementValueAccess().getGroup_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValue__Group_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotationElementValue__Group_0__1__Impl
	rule__XAnnotationElementValue__Group_0__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValue__Group_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationElementValueAccess().getGroup_0_1()); }
	(rule__XAnnotationElementValue__Group_0_1__0)?
	{ after(grammarAccess.getXAnnotationElementValueAccess().getGroup_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValue__Group_0__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotationElementValue__Group_0__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValue__Group_0__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationElementValueAccess().getRightSquareBracketKeyword_0_2()); }
	']'
	{ after(grammarAccess.getXAnnotationElementValueAccess().getRightSquareBracketKeyword_0_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XAnnotationElementValue__Group_0_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotationElementValue__Group_0_0__0__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValue__Group_0_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationElementValueAccess().getGroup_0_0_0()); }
	(rule__XAnnotationElementValue__Group_0_0_0__0)
	{ after(grammarAccess.getXAnnotationElementValueAccess().getGroup_0_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XAnnotationElementValue__Group_0_0_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotationElementValue__Group_0_0_0__0__Impl
	rule__XAnnotationElementValue__Group_0_0_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValue__Group_0_0_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationElementValueAccess().getXListLiteralAction_0_0_0_0()); }
	()
	{ after(grammarAccess.getXAnnotationElementValueAccess().getXListLiteralAction_0_0_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValue__Group_0_0_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotationElementValue__Group_0_0_0__1__Impl
	rule__XAnnotationElementValue__Group_0_0_0__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValue__Group_0_0_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationElementValueAccess().getNumberSignKeyword_0_0_0_1()); }
	'#'
	{ after(grammarAccess.getXAnnotationElementValueAccess().getNumberSignKeyword_0_0_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValue__Group_0_0_0__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotationElementValue__Group_0_0_0__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValue__Group_0_0_0__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationElementValueAccess().getLeftSquareBracketKeyword_0_0_0_2()); }
	'['
	{ after(grammarAccess.getXAnnotationElementValueAccess().getLeftSquareBracketKeyword_0_0_0_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XAnnotationElementValue__Group_0_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotationElementValue__Group_0_1__0__Impl
	rule__XAnnotationElementValue__Group_0_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValue__Group_0_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationElementValueAccess().getElementsAssignment_0_1_0()); }
	(rule__XAnnotationElementValue__ElementsAssignment_0_1_0)
	{ after(grammarAccess.getXAnnotationElementValueAccess().getElementsAssignment_0_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValue__Group_0_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotationElementValue__Group_0_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValue__Group_0_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationElementValueAccess().getGroup_0_1_1()); }
	(rule__XAnnotationElementValue__Group_0_1_1__0)*
	{ after(grammarAccess.getXAnnotationElementValueAccess().getGroup_0_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XAnnotationElementValue__Group_0_1_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotationElementValue__Group_0_1_1__0__Impl
	rule__XAnnotationElementValue__Group_0_1_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValue__Group_0_1_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationElementValueAccess().getCommaKeyword_0_1_1_0()); }
	','
	{ after(grammarAccess.getXAnnotationElementValueAccess().getCommaKeyword_0_1_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValue__Group_0_1_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAnnotationElementValue__Group_0_1_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValue__Group_0_1_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAnnotationElementValueAccess().getElementsAssignment_0_1_1_1()); }
	(rule__XAnnotationElementValue__ElementsAssignment_0_1_1_1)
	{ after(grammarAccess.getXAnnotationElementValueAccess().getElementsAssignment_0_1_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XAssignment__Group_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAssignment__Group_0__0__Impl
	rule__XAssignment__Group_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XAssignment__Group_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAssignmentAccess().getXAssignmentAction_0_0()); }
	()
	{ after(grammarAccess.getXAssignmentAccess().getXAssignmentAction_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAssignment__Group_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAssignment__Group_0__1__Impl
	rule__XAssignment__Group_0__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XAssignment__Group_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAssignmentAccess().getFeatureAssignment_0_1()); }
	(rule__XAssignment__FeatureAssignment_0_1)
	{ after(grammarAccess.getXAssignmentAccess().getFeatureAssignment_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAssignment__Group_0__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAssignment__Group_0__2__Impl
	rule__XAssignment__Group_0__3
;
finally {
	restoreStackSize(stackSize);
}

rule__XAssignment__Group_0__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAssignmentAccess().getOpSingleAssignParserRuleCall_0_2()); }
	ruleOpSingleAssign
	{ after(grammarAccess.getXAssignmentAccess().getOpSingleAssignParserRuleCall_0_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAssignment__Group_0__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAssignment__Group_0__3__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XAssignment__Group_0__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAssignmentAccess().getValueAssignment_0_3()); }
	(rule__XAssignment__ValueAssignment_0_3)
	{ after(grammarAccess.getXAssignmentAccess().getValueAssignment_0_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XAssignment__Group_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAssignment__Group_1__0__Impl
	rule__XAssignment__Group_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XAssignment__Group_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAssignmentAccess().getXOrExpressionParserRuleCall_1_0()); }
	ruleXOrExpression
	{ after(grammarAccess.getXAssignmentAccess().getXOrExpressionParserRuleCall_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAssignment__Group_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAssignment__Group_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XAssignment__Group_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAssignmentAccess().getGroup_1_1()); }
	(rule__XAssignment__Group_1_1__0)?
	{ after(grammarAccess.getXAssignmentAccess().getGroup_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XAssignment__Group_1_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAssignment__Group_1_1__0__Impl
	rule__XAssignment__Group_1_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XAssignment__Group_1_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAssignmentAccess().getGroup_1_1_0()); }
	(rule__XAssignment__Group_1_1_0__0)
	{ after(grammarAccess.getXAssignmentAccess().getGroup_1_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAssignment__Group_1_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAssignment__Group_1_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XAssignment__Group_1_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAssignmentAccess().getRightOperandAssignment_1_1_1()); }
	(rule__XAssignment__RightOperandAssignment_1_1_1)
	{ after(grammarAccess.getXAssignmentAccess().getRightOperandAssignment_1_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XAssignment__Group_1_1_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAssignment__Group_1_1_0__0__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XAssignment__Group_1_1_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAssignmentAccess().getGroup_1_1_0_0()); }
	(rule__XAssignment__Group_1_1_0_0__0)
	{ after(grammarAccess.getXAssignmentAccess().getGroup_1_1_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XAssignment__Group_1_1_0_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAssignment__Group_1_1_0_0__0__Impl
	rule__XAssignment__Group_1_1_0_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XAssignment__Group_1_1_0_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAssignmentAccess().getXBinaryOperationLeftOperandAction_1_1_0_0_0()); }
	()
	{ after(grammarAccess.getXAssignmentAccess().getXBinaryOperationLeftOperandAction_1_1_0_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAssignment__Group_1_1_0_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAssignment__Group_1_1_0_0__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XAssignment__Group_1_1_0_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAssignmentAccess().getFeatureAssignment_1_1_0_0_1()); }
	(rule__XAssignment__FeatureAssignment_1_1_0_0_1)
	{ after(grammarAccess.getXAssignmentAccess().getFeatureAssignment_1_1_0_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__OpMultiAssign__Group_5__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__OpMultiAssign__Group_5__0__Impl
	rule__OpMultiAssign__Group_5__1
;
finally {
	restoreStackSize(stackSize);
}

rule__OpMultiAssign__Group_5__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getOpMultiAssignAccess().getLessThanSignKeyword_5_0()); }
	'<'
	{ after(grammarAccess.getOpMultiAssignAccess().getLessThanSignKeyword_5_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__OpMultiAssign__Group_5__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__OpMultiAssign__Group_5__1__Impl
	rule__OpMultiAssign__Group_5__2
;
finally {
	restoreStackSize(stackSize);
}

rule__OpMultiAssign__Group_5__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getOpMultiAssignAccess().getLessThanSignKeyword_5_1()); }
	'<'
	{ after(grammarAccess.getOpMultiAssignAccess().getLessThanSignKeyword_5_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__OpMultiAssign__Group_5__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__OpMultiAssign__Group_5__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__OpMultiAssign__Group_5__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getOpMultiAssignAccess().getEqualsSignKeyword_5_2()); }
	'='
	{ after(grammarAccess.getOpMultiAssignAccess().getEqualsSignKeyword_5_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__OpMultiAssign__Group_6__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__OpMultiAssign__Group_6__0__Impl
	rule__OpMultiAssign__Group_6__1
;
finally {
	restoreStackSize(stackSize);
}

rule__OpMultiAssign__Group_6__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getOpMultiAssignAccess().getGreaterThanSignKeyword_6_0()); }
	'>'
	{ after(grammarAccess.getOpMultiAssignAccess().getGreaterThanSignKeyword_6_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__OpMultiAssign__Group_6__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__OpMultiAssign__Group_6__1__Impl
	rule__OpMultiAssign__Group_6__2
;
finally {
	restoreStackSize(stackSize);
}

rule__OpMultiAssign__Group_6__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getOpMultiAssignAccess().getGreaterThanSignKeyword_6_1()); }
	('>')?
	{ after(grammarAccess.getOpMultiAssignAccess().getGreaterThanSignKeyword_6_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__OpMultiAssign__Group_6__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__OpMultiAssign__Group_6__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__OpMultiAssign__Group_6__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getOpMultiAssignAccess().getGreaterThanSignEqualsSignKeyword_6_2()); }
	'>='
	{ after(grammarAccess.getOpMultiAssignAccess().getGreaterThanSignEqualsSignKeyword_6_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XOrExpression__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XOrExpression__Group__0__Impl
	rule__XOrExpression__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XOrExpression__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXOrExpressionAccess().getXAndExpressionParserRuleCall_0()); }
	ruleXAndExpression
	{ after(grammarAccess.getXOrExpressionAccess().getXAndExpressionParserRuleCall_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XOrExpression__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XOrExpression__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XOrExpression__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXOrExpressionAccess().getGroup_1()); }
	(rule__XOrExpression__Group_1__0)*
	{ after(grammarAccess.getXOrExpressionAccess().getGroup_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XOrExpression__Group_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XOrExpression__Group_1__0__Impl
	rule__XOrExpression__Group_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XOrExpression__Group_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXOrExpressionAccess().getGroup_1_0()); }
	(rule__XOrExpression__Group_1_0__0)
	{ after(grammarAccess.getXOrExpressionAccess().getGroup_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XOrExpression__Group_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XOrExpression__Group_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XOrExpression__Group_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXOrExpressionAccess().getRightOperandAssignment_1_1()); }
	(rule__XOrExpression__RightOperandAssignment_1_1)
	{ after(grammarAccess.getXOrExpressionAccess().getRightOperandAssignment_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XOrExpression__Group_1_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XOrExpression__Group_1_0__0__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XOrExpression__Group_1_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXOrExpressionAccess().getGroup_1_0_0()); }
	(rule__XOrExpression__Group_1_0_0__0)
	{ after(grammarAccess.getXOrExpressionAccess().getGroup_1_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XOrExpression__Group_1_0_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XOrExpression__Group_1_0_0__0__Impl
	rule__XOrExpression__Group_1_0_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XOrExpression__Group_1_0_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXOrExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0()); }
	()
	{ after(grammarAccess.getXOrExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XOrExpression__Group_1_0_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XOrExpression__Group_1_0_0__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XOrExpression__Group_1_0_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXOrExpressionAccess().getFeatureAssignment_1_0_0_1()); }
	(rule__XOrExpression__FeatureAssignment_1_0_0_1)
	{ after(grammarAccess.getXOrExpressionAccess().getFeatureAssignment_1_0_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XAndExpression__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAndExpression__Group__0__Impl
	rule__XAndExpression__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XAndExpression__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAndExpressionAccess().getXEqualityExpressionParserRuleCall_0()); }
	ruleXEqualityExpression
	{ after(grammarAccess.getXAndExpressionAccess().getXEqualityExpressionParserRuleCall_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAndExpression__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAndExpression__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XAndExpression__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAndExpressionAccess().getGroup_1()); }
	(rule__XAndExpression__Group_1__0)*
	{ after(grammarAccess.getXAndExpressionAccess().getGroup_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XAndExpression__Group_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAndExpression__Group_1__0__Impl
	rule__XAndExpression__Group_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XAndExpression__Group_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAndExpressionAccess().getGroup_1_0()); }
	(rule__XAndExpression__Group_1_0__0)
	{ after(grammarAccess.getXAndExpressionAccess().getGroup_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAndExpression__Group_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAndExpression__Group_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XAndExpression__Group_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAndExpressionAccess().getRightOperandAssignment_1_1()); }
	(rule__XAndExpression__RightOperandAssignment_1_1)
	{ after(grammarAccess.getXAndExpressionAccess().getRightOperandAssignment_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XAndExpression__Group_1_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAndExpression__Group_1_0__0__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XAndExpression__Group_1_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAndExpressionAccess().getGroup_1_0_0()); }
	(rule__XAndExpression__Group_1_0_0__0)
	{ after(grammarAccess.getXAndExpressionAccess().getGroup_1_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XAndExpression__Group_1_0_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAndExpression__Group_1_0_0__0__Impl
	rule__XAndExpression__Group_1_0_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XAndExpression__Group_1_0_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAndExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0()); }
	()
	{ after(grammarAccess.getXAndExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAndExpression__Group_1_0_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAndExpression__Group_1_0_0__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XAndExpression__Group_1_0_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAndExpressionAccess().getFeatureAssignment_1_0_0_1()); }
	(rule__XAndExpression__FeatureAssignment_1_0_0_1)
	{ after(grammarAccess.getXAndExpressionAccess().getFeatureAssignment_1_0_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XEqualityExpression__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XEqualityExpression__Group__0__Impl
	rule__XEqualityExpression__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XEqualityExpression__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXEqualityExpressionAccess().getXRelationalExpressionParserRuleCall_0()); }
	ruleXRelationalExpression
	{ after(grammarAccess.getXEqualityExpressionAccess().getXRelationalExpressionParserRuleCall_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XEqualityExpression__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XEqualityExpression__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XEqualityExpression__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXEqualityExpressionAccess().getGroup_1()); }
	(rule__XEqualityExpression__Group_1__0)*
	{ after(grammarAccess.getXEqualityExpressionAccess().getGroup_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XEqualityExpression__Group_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XEqualityExpression__Group_1__0__Impl
	rule__XEqualityExpression__Group_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XEqualityExpression__Group_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXEqualityExpressionAccess().getGroup_1_0()); }
	(rule__XEqualityExpression__Group_1_0__0)
	{ after(grammarAccess.getXEqualityExpressionAccess().getGroup_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XEqualityExpression__Group_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XEqualityExpression__Group_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XEqualityExpression__Group_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXEqualityExpressionAccess().getRightOperandAssignment_1_1()); }
	(rule__XEqualityExpression__RightOperandAssignment_1_1)
	{ after(grammarAccess.getXEqualityExpressionAccess().getRightOperandAssignment_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XEqualityExpression__Group_1_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XEqualityExpression__Group_1_0__0__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XEqualityExpression__Group_1_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXEqualityExpressionAccess().getGroup_1_0_0()); }
	(rule__XEqualityExpression__Group_1_0_0__0)
	{ after(grammarAccess.getXEqualityExpressionAccess().getGroup_1_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XEqualityExpression__Group_1_0_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XEqualityExpression__Group_1_0_0__0__Impl
	rule__XEqualityExpression__Group_1_0_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XEqualityExpression__Group_1_0_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXEqualityExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0()); }
	()
	{ after(grammarAccess.getXEqualityExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XEqualityExpression__Group_1_0_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XEqualityExpression__Group_1_0_0__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XEqualityExpression__Group_1_0_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXEqualityExpressionAccess().getFeatureAssignment_1_0_0_1()); }
	(rule__XEqualityExpression__FeatureAssignment_1_0_0_1)
	{ after(grammarAccess.getXEqualityExpressionAccess().getFeatureAssignment_1_0_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XRelationalExpression__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XRelationalExpression__Group__0__Impl
	rule__XRelationalExpression__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XRelationalExpression__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXRelationalExpressionAccess().getXOtherOperatorExpressionParserRuleCall_0()); }
	ruleXOtherOperatorExpression
	{ after(grammarAccess.getXRelationalExpressionAccess().getXOtherOperatorExpressionParserRuleCall_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XRelationalExpression__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XRelationalExpression__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XRelationalExpression__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXRelationalExpressionAccess().getAlternatives_1()); }
	(rule__XRelationalExpression__Alternatives_1)*
	{ after(grammarAccess.getXRelationalExpressionAccess().getAlternatives_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XRelationalExpression__Group_1_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XRelationalExpression__Group_1_0__0__Impl
	rule__XRelationalExpression__Group_1_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XRelationalExpression__Group_1_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXRelationalExpressionAccess().getGroup_1_0_0()); }
	(rule__XRelationalExpression__Group_1_0_0__0)
	{ after(grammarAccess.getXRelationalExpressionAccess().getGroup_1_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XRelationalExpression__Group_1_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XRelationalExpression__Group_1_0__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XRelationalExpression__Group_1_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXRelationalExpressionAccess().getTypeAssignment_1_0_1()); }
	(rule__XRelationalExpression__TypeAssignment_1_0_1)
	{ after(grammarAccess.getXRelationalExpressionAccess().getTypeAssignment_1_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XRelationalExpression__Group_1_0_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XRelationalExpression__Group_1_0_0__0__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XRelationalExpression__Group_1_0_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXRelationalExpressionAccess().getGroup_1_0_0_0()); }
	(rule__XRelationalExpression__Group_1_0_0_0__0)
	{ after(grammarAccess.getXRelationalExpressionAccess().getGroup_1_0_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XRelationalExpression__Group_1_0_0_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XRelationalExpression__Group_1_0_0_0__0__Impl
	rule__XRelationalExpression__Group_1_0_0_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XRelationalExpression__Group_1_0_0_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXRelationalExpressionAccess().getXInstanceOfExpressionExpressionAction_1_0_0_0_0()); }
	()
	{ after(grammarAccess.getXRelationalExpressionAccess().getXInstanceOfExpressionExpressionAction_1_0_0_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XRelationalExpression__Group_1_0_0_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XRelationalExpression__Group_1_0_0_0__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XRelationalExpression__Group_1_0_0_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXRelationalExpressionAccess().getInstanceofKeyword_1_0_0_0_1()); }
	'instanceof'
	{ after(grammarAccess.getXRelationalExpressionAccess().getInstanceofKeyword_1_0_0_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XRelationalExpression__Group_1_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XRelationalExpression__Group_1_1__0__Impl
	rule__XRelationalExpression__Group_1_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XRelationalExpression__Group_1_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXRelationalExpressionAccess().getGroup_1_1_0()); }
	(rule__XRelationalExpression__Group_1_1_0__0)
	{ after(grammarAccess.getXRelationalExpressionAccess().getGroup_1_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XRelationalExpression__Group_1_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XRelationalExpression__Group_1_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XRelationalExpression__Group_1_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXRelationalExpressionAccess().getRightOperandAssignment_1_1_1()); }
	(rule__XRelationalExpression__RightOperandAssignment_1_1_1)
	{ after(grammarAccess.getXRelationalExpressionAccess().getRightOperandAssignment_1_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XRelationalExpression__Group_1_1_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XRelationalExpression__Group_1_1_0__0__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XRelationalExpression__Group_1_1_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXRelationalExpressionAccess().getGroup_1_1_0_0()); }
	(rule__XRelationalExpression__Group_1_1_0_0__0)
	{ after(grammarAccess.getXRelationalExpressionAccess().getGroup_1_1_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XRelationalExpression__Group_1_1_0_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XRelationalExpression__Group_1_1_0_0__0__Impl
	rule__XRelationalExpression__Group_1_1_0_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XRelationalExpression__Group_1_1_0_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXRelationalExpressionAccess().getXBinaryOperationLeftOperandAction_1_1_0_0_0()); }
	()
	{ after(grammarAccess.getXRelationalExpressionAccess().getXBinaryOperationLeftOperandAction_1_1_0_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XRelationalExpression__Group_1_1_0_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XRelationalExpression__Group_1_1_0_0__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XRelationalExpression__Group_1_1_0_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXRelationalExpressionAccess().getFeatureAssignment_1_1_0_0_1()); }
	(rule__XRelationalExpression__FeatureAssignment_1_1_0_0_1)
	{ after(grammarAccess.getXRelationalExpressionAccess().getFeatureAssignment_1_1_0_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__OpCompare__Group_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__OpCompare__Group_1__0__Impl
	rule__OpCompare__Group_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__OpCompare__Group_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getOpCompareAccess().getLessThanSignKeyword_1_0()); }
	'<'
	{ after(grammarAccess.getOpCompareAccess().getLessThanSignKeyword_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__OpCompare__Group_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__OpCompare__Group_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__OpCompare__Group_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getOpCompareAccess().getEqualsSignKeyword_1_1()); }
	'='
	{ after(grammarAccess.getOpCompareAccess().getEqualsSignKeyword_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XOtherOperatorExpression__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XOtherOperatorExpression__Group__0__Impl
	rule__XOtherOperatorExpression__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XOtherOperatorExpression__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXOtherOperatorExpressionAccess().getXAdditiveExpressionParserRuleCall_0()); }
	ruleXAdditiveExpression
	{ after(grammarAccess.getXOtherOperatorExpressionAccess().getXAdditiveExpressionParserRuleCall_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XOtherOperatorExpression__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XOtherOperatorExpression__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XOtherOperatorExpression__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXOtherOperatorExpressionAccess().getGroup_1()); }
	(rule__XOtherOperatorExpression__Group_1__0)*
	{ after(grammarAccess.getXOtherOperatorExpressionAccess().getGroup_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XOtherOperatorExpression__Group_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XOtherOperatorExpression__Group_1__0__Impl
	rule__XOtherOperatorExpression__Group_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XOtherOperatorExpression__Group_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXOtherOperatorExpressionAccess().getGroup_1_0()); }
	(rule__XOtherOperatorExpression__Group_1_0__0)
	{ after(grammarAccess.getXOtherOperatorExpressionAccess().getGroup_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XOtherOperatorExpression__Group_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XOtherOperatorExpression__Group_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XOtherOperatorExpression__Group_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXOtherOperatorExpressionAccess().getRightOperandAssignment_1_1()); }
	(rule__XOtherOperatorExpression__RightOperandAssignment_1_1)
	{ after(grammarAccess.getXOtherOperatorExpressionAccess().getRightOperandAssignment_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XOtherOperatorExpression__Group_1_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XOtherOperatorExpression__Group_1_0__0__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XOtherOperatorExpression__Group_1_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXOtherOperatorExpressionAccess().getGroup_1_0_0()); }
	(rule__XOtherOperatorExpression__Group_1_0_0__0)
	{ after(grammarAccess.getXOtherOperatorExpressionAccess().getGroup_1_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XOtherOperatorExpression__Group_1_0_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XOtherOperatorExpression__Group_1_0_0__0__Impl
	rule__XOtherOperatorExpression__Group_1_0_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XOtherOperatorExpression__Group_1_0_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXOtherOperatorExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0()); }
	()
	{ after(grammarAccess.getXOtherOperatorExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XOtherOperatorExpression__Group_1_0_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XOtherOperatorExpression__Group_1_0_0__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XOtherOperatorExpression__Group_1_0_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXOtherOperatorExpressionAccess().getFeatureAssignment_1_0_0_1()); }
	(rule__XOtherOperatorExpression__FeatureAssignment_1_0_0_1)
	{ after(grammarAccess.getXOtherOperatorExpressionAccess().getFeatureAssignment_1_0_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__OpOther__Group_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__OpOther__Group_2__0__Impl
	rule__OpOther__Group_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__OpOther__Group_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getOpOtherAccess().getGreaterThanSignKeyword_2_0()); }
	'>'
	{ after(grammarAccess.getOpOtherAccess().getGreaterThanSignKeyword_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__OpOther__Group_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__OpOther__Group_2__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__OpOther__Group_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getOpOtherAccess().getFullStopFullStopKeyword_2_1()); }
	'..'
	{ after(grammarAccess.getOpOtherAccess().getFullStopFullStopKeyword_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__OpOther__Group_5__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__OpOther__Group_5__0__Impl
	rule__OpOther__Group_5__1
;
finally {
	restoreStackSize(stackSize);
}

rule__OpOther__Group_5__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getOpOtherAccess().getGreaterThanSignKeyword_5_0()); }
	'>'
	{ after(grammarAccess.getOpOtherAccess().getGreaterThanSignKeyword_5_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__OpOther__Group_5__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__OpOther__Group_5__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__OpOther__Group_5__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getOpOtherAccess().getAlternatives_5_1()); }
	(rule__OpOther__Alternatives_5_1)
	{ after(grammarAccess.getOpOtherAccess().getAlternatives_5_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__OpOther__Group_5_1_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__OpOther__Group_5_1_0__0__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__OpOther__Group_5_1_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getOpOtherAccess().getGroup_5_1_0_0()); }
	(rule__OpOther__Group_5_1_0_0__0)
	{ after(grammarAccess.getOpOtherAccess().getGroup_5_1_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__OpOther__Group_5_1_0_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__OpOther__Group_5_1_0_0__0__Impl
	rule__OpOther__Group_5_1_0_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__OpOther__Group_5_1_0_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getOpOtherAccess().getGreaterThanSignKeyword_5_1_0_0_0()); }
	'>'
	{ after(grammarAccess.getOpOtherAccess().getGreaterThanSignKeyword_5_1_0_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__OpOther__Group_5_1_0_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__OpOther__Group_5_1_0_0__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__OpOther__Group_5_1_0_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getOpOtherAccess().getGreaterThanSignKeyword_5_1_0_0_1()); }
	'>'
	{ after(grammarAccess.getOpOtherAccess().getGreaterThanSignKeyword_5_1_0_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__OpOther__Group_6__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__OpOther__Group_6__0__Impl
	rule__OpOther__Group_6__1
;
finally {
	restoreStackSize(stackSize);
}

rule__OpOther__Group_6__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getOpOtherAccess().getLessThanSignKeyword_6_0()); }
	'<'
	{ after(grammarAccess.getOpOtherAccess().getLessThanSignKeyword_6_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__OpOther__Group_6__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__OpOther__Group_6__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__OpOther__Group_6__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getOpOtherAccess().getAlternatives_6_1()); }
	(rule__OpOther__Alternatives_6_1)
	{ after(grammarAccess.getOpOtherAccess().getAlternatives_6_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__OpOther__Group_6_1_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__OpOther__Group_6_1_0__0__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__OpOther__Group_6_1_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getOpOtherAccess().getGroup_6_1_0_0()); }
	(rule__OpOther__Group_6_1_0_0__0)
	{ after(grammarAccess.getOpOtherAccess().getGroup_6_1_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__OpOther__Group_6_1_0_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__OpOther__Group_6_1_0_0__0__Impl
	rule__OpOther__Group_6_1_0_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__OpOther__Group_6_1_0_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getOpOtherAccess().getLessThanSignKeyword_6_1_0_0_0()); }
	'<'
	{ after(grammarAccess.getOpOtherAccess().getLessThanSignKeyword_6_1_0_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__OpOther__Group_6_1_0_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__OpOther__Group_6_1_0_0__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__OpOther__Group_6_1_0_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getOpOtherAccess().getLessThanSignKeyword_6_1_0_0_1()); }
	'<'
	{ after(grammarAccess.getOpOtherAccess().getLessThanSignKeyword_6_1_0_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XAdditiveExpression__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAdditiveExpression__Group__0__Impl
	rule__XAdditiveExpression__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XAdditiveExpression__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAdditiveExpressionAccess().getXMultiplicativeExpressionParserRuleCall_0()); }
	ruleXMultiplicativeExpression
	{ after(grammarAccess.getXAdditiveExpressionAccess().getXMultiplicativeExpressionParserRuleCall_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAdditiveExpression__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAdditiveExpression__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XAdditiveExpression__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAdditiveExpressionAccess().getGroup_1()); }
	(rule__XAdditiveExpression__Group_1__0)*
	{ after(grammarAccess.getXAdditiveExpressionAccess().getGroup_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XAdditiveExpression__Group_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAdditiveExpression__Group_1__0__Impl
	rule__XAdditiveExpression__Group_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XAdditiveExpression__Group_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAdditiveExpressionAccess().getGroup_1_0()); }
	(rule__XAdditiveExpression__Group_1_0__0)
	{ after(grammarAccess.getXAdditiveExpressionAccess().getGroup_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAdditiveExpression__Group_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAdditiveExpression__Group_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XAdditiveExpression__Group_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAdditiveExpressionAccess().getRightOperandAssignment_1_1()); }
	(rule__XAdditiveExpression__RightOperandAssignment_1_1)
	{ after(grammarAccess.getXAdditiveExpressionAccess().getRightOperandAssignment_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XAdditiveExpression__Group_1_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAdditiveExpression__Group_1_0__0__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XAdditiveExpression__Group_1_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAdditiveExpressionAccess().getGroup_1_0_0()); }
	(rule__XAdditiveExpression__Group_1_0_0__0)
	{ after(grammarAccess.getXAdditiveExpressionAccess().getGroup_1_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XAdditiveExpression__Group_1_0_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAdditiveExpression__Group_1_0_0__0__Impl
	rule__XAdditiveExpression__Group_1_0_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XAdditiveExpression__Group_1_0_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAdditiveExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0()); }
	()
	{ after(grammarAccess.getXAdditiveExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAdditiveExpression__Group_1_0_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XAdditiveExpression__Group_1_0_0__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XAdditiveExpression__Group_1_0_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXAdditiveExpressionAccess().getFeatureAssignment_1_0_0_1()); }
	(rule__XAdditiveExpression__FeatureAssignment_1_0_0_1)
	{ after(grammarAccess.getXAdditiveExpressionAccess().getFeatureAssignment_1_0_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XMultiplicativeExpression__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMultiplicativeExpression__Group__0__Impl
	rule__XMultiplicativeExpression__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XMultiplicativeExpression__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMultiplicativeExpressionAccess().getXUnaryOperationParserRuleCall_0()); }
	ruleXUnaryOperation
	{ after(grammarAccess.getXMultiplicativeExpressionAccess().getXUnaryOperationParserRuleCall_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMultiplicativeExpression__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMultiplicativeExpression__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XMultiplicativeExpression__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMultiplicativeExpressionAccess().getGroup_1()); }
	(rule__XMultiplicativeExpression__Group_1__0)*
	{ after(grammarAccess.getXMultiplicativeExpressionAccess().getGroup_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XMultiplicativeExpression__Group_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMultiplicativeExpression__Group_1__0__Impl
	rule__XMultiplicativeExpression__Group_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XMultiplicativeExpression__Group_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMultiplicativeExpressionAccess().getGroup_1_0()); }
	(rule__XMultiplicativeExpression__Group_1_0__0)
	{ after(grammarAccess.getXMultiplicativeExpressionAccess().getGroup_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMultiplicativeExpression__Group_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMultiplicativeExpression__Group_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XMultiplicativeExpression__Group_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMultiplicativeExpressionAccess().getRightOperandAssignment_1_1()); }
	(rule__XMultiplicativeExpression__RightOperandAssignment_1_1)
	{ after(grammarAccess.getXMultiplicativeExpressionAccess().getRightOperandAssignment_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XMultiplicativeExpression__Group_1_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMultiplicativeExpression__Group_1_0__0__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XMultiplicativeExpression__Group_1_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMultiplicativeExpressionAccess().getGroup_1_0_0()); }
	(rule__XMultiplicativeExpression__Group_1_0_0__0)
	{ after(grammarAccess.getXMultiplicativeExpressionAccess().getGroup_1_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XMultiplicativeExpression__Group_1_0_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMultiplicativeExpression__Group_1_0_0__0__Impl
	rule__XMultiplicativeExpression__Group_1_0_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XMultiplicativeExpression__Group_1_0_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMultiplicativeExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0()); }
	()
	{ after(grammarAccess.getXMultiplicativeExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMultiplicativeExpression__Group_1_0_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMultiplicativeExpression__Group_1_0_0__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XMultiplicativeExpression__Group_1_0_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMultiplicativeExpressionAccess().getFeatureAssignment_1_0_0_1()); }
	(rule__XMultiplicativeExpression__FeatureAssignment_1_0_0_1)
	{ after(grammarAccess.getXMultiplicativeExpressionAccess().getFeatureAssignment_1_0_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XUnaryOperation__Group_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XUnaryOperation__Group_0__0__Impl
	rule__XUnaryOperation__Group_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XUnaryOperation__Group_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXUnaryOperationAccess().getXUnaryOperationAction_0_0()); }
	()
	{ after(grammarAccess.getXUnaryOperationAccess().getXUnaryOperationAction_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XUnaryOperation__Group_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XUnaryOperation__Group_0__1__Impl
	rule__XUnaryOperation__Group_0__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XUnaryOperation__Group_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXUnaryOperationAccess().getFeatureAssignment_0_1()); }
	(rule__XUnaryOperation__FeatureAssignment_0_1)
	{ after(grammarAccess.getXUnaryOperationAccess().getFeatureAssignment_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XUnaryOperation__Group_0__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XUnaryOperation__Group_0__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XUnaryOperation__Group_0__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXUnaryOperationAccess().getOperandAssignment_0_2()); }
	(rule__XUnaryOperation__OperandAssignment_0_2)
	{ after(grammarAccess.getXUnaryOperationAccess().getOperandAssignment_0_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XCastedExpression__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XCastedExpression__Group__0__Impl
	rule__XCastedExpression__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XCastedExpression__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXCastedExpressionAccess().getXPostfixOperationParserRuleCall_0()); }
	ruleXPostfixOperation
	{ after(grammarAccess.getXCastedExpressionAccess().getXPostfixOperationParserRuleCall_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XCastedExpression__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XCastedExpression__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XCastedExpression__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXCastedExpressionAccess().getGroup_1()); }
	(rule__XCastedExpression__Group_1__0)*
	{ after(grammarAccess.getXCastedExpressionAccess().getGroup_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XCastedExpression__Group_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XCastedExpression__Group_1__0__Impl
	rule__XCastedExpression__Group_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XCastedExpression__Group_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXCastedExpressionAccess().getGroup_1_0()); }
	(rule__XCastedExpression__Group_1_0__0)
	{ after(grammarAccess.getXCastedExpressionAccess().getGroup_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XCastedExpression__Group_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XCastedExpression__Group_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XCastedExpression__Group_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXCastedExpressionAccess().getTypeAssignment_1_1()); }
	(rule__XCastedExpression__TypeAssignment_1_1)
	{ after(grammarAccess.getXCastedExpressionAccess().getTypeAssignment_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XCastedExpression__Group_1_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XCastedExpression__Group_1_0__0__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XCastedExpression__Group_1_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXCastedExpressionAccess().getGroup_1_0_0()); }
	(rule__XCastedExpression__Group_1_0_0__0)
	{ after(grammarAccess.getXCastedExpressionAccess().getGroup_1_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XCastedExpression__Group_1_0_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XCastedExpression__Group_1_0_0__0__Impl
	rule__XCastedExpression__Group_1_0_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XCastedExpression__Group_1_0_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXCastedExpressionAccess().getXCastedExpressionTargetAction_1_0_0_0()); }
	()
	{ after(grammarAccess.getXCastedExpressionAccess().getXCastedExpressionTargetAction_1_0_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XCastedExpression__Group_1_0_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XCastedExpression__Group_1_0_0__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XCastedExpression__Group_1_0_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXCastedExpressionAccess().getAsKeyword_1_0_0_1()); }
	'as'
	{ after(grammarAccess.getXCastedExpressionAccess().getAsKeyword_1_0_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XPostfixOperation__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XPostfixOperation__Group__0__Impl
	rule__XPostfixOperation__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XPostfixOperation__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXPostfixOperationAccess().getXMemberFeatureCallParserRuleCall_0()); }
	ruleXMemberFeatureCall
	{ after(grammarAccess.getXPostfixOperationAccess().getXMemberFeatureCallParserRuleCall_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XPostfixOperation__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XPostfixOperation__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XPostfixOperation__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXPostfixOperationAccess().getGroup_1()); }
	(rule__XPostfixOperation__Group_1__0)?
	{ after(grammarAccess.getXPostfixOperationAccess().getGroup_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XPostfixOperation__Group_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XPostfixOperation__Group_1__0__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XPostfixOperation__Group_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXPostfixOperationAccess().getGroup_1_0()); }
	(rule__XPostfixOperation__Group_1_0__0)
	{ after(grammarAccess.getXPostfixOperationAccess().getGroup_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XPostfixOperation__Group_1_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XPostfixOperation__Group_1_0__0__Impl
	rule__XPostfixOperation__Group_1_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XPostfixOperation__Group_1_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXPostfixOperationAccess().getXPostfixOperationOperandAction_1_0_0()); }
	()
	{ after(grammarAccess.getXPostfixOperationAccess().getXPostfixOperationOperandAction_1_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XPostfixOperation__Group_1_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XPostfixOperation__Group_1_0__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XPostfixOperation__Group_1_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXPostfixOperationAccess().getFeatureAssignment_1_0_1()); }
	(rule__XPostfixOperation__FeatureAssignment_1_0_1)
	{ after(grammarAccess.getXPostfixOperationAccess().getFeatureAssignment_1_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XMemberFeatureCall__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMemberFeatureCall__Group__0__Impl
	rule__XMemberFeatureCall__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMemberFeatureCallAccess().getXPrimaryExpressionParserRuleCall_0()); }
	ruleXPrimaryExpression
	{ after(grammarAccess.getXMemberFeatureCallAccess().getXPrimaryExpressionParserRuleCall_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMemberFeatureCall__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMemberFeatureCallAccess().getAlternatives_1()); }
	(rule__XMemberFeatureCall__Alternatives_1)*
	{ after(grammarAccess.getXMemberFeatureCallAccess().getAlternatives_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XMemberFeatureCall__Group_1_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMemberFeatureCall__Group_1_0__0__Impl
	rule__XMemberFeatureCall__Group_1_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_0_0()); }
	(rule__XMemberFeatureCall__Group_1_0_0__0)
	{ after(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMemberFeatureCall__Group_1_0__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMemberFeatureCallAccess().getValueAssignment_1_0_1()); }
	(rule__XMemberFeatureCall__ValueAssignment_1_0_1)
	{ after(grammarAccess.getXMemberFeatureCallAccess().getValueAssignment_1_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XMemberFeatureCall__Group_1_0_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMemberFeatureCall__Group_1_0_0__0__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_0_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_0_0_0()); }
	(rule__XMemberFeatureCall__Group_1_0_0_0__0)
	{ after(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_0_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XMemberFeatureCall__Group_1_0_0_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMemberFeatureCall__Group_1_0_0_0__0__Impl
	rule__XMemberFeatureCall__Group_1_0_0_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_0_0_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMemberFeatureCallAccess().getXAssignmentAssignableAction_1_0_0_0_0()); }
	()
	{ after(grammarAccess.getXMemberFeatureCallAccess().getXAssignmentAssignableAction_1_0_0_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_0_0_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMemberFeatureCall__Group_1_0_0_0__1__Impl
	rule__XMemberFeatureCall__Group_1_0_0_0__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_0_0_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMemberFeatureCallAccess().getAlternatives_1_0_0_0_1()); }
	(rule__XMemberFeatureCall__Alternatives_1_0_0_0_1)
	{ after(grammarAccess.getXMemberFeatureCallAccess().getAlternatives_1_0_0_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_0_0_0__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMemberFeatureCall__Group_1_0_0_0__2__Impl
	rule__XMemberFeatureCall__Group_1_0_0_0__3
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_0_0_0__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMemberFeatureCallAccess().getFeatureAssignment_1_0_0_0_2()); }
	(rule__XMemberFeatureCall__FeatureAssignment_1_0_0_0_2)
	{ after(grammarAccess.getXMemberFeatureCallAccess().getFeatureAssignment_1_0_0_0_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_0_0_0__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMemberFeatureCall__Group_1_0_0_0__3__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_0_0_0__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMemberFeatureCallAccess().getOpSingleAssignParserRuleCall_1_0_0_0_3()); }
	ruleOpSingleAssign
	{ after(grammarAccess.getXMemberFeatureCallAccess().getOpSingleAssignParserRuleCall_1_0_0_0_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XMemberFeatureCall__Group_1_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMemberFeatureCall__Group_1_1__0__Impl
	rule__XMemberFeatureCall__Group_1_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_1_0()); }
	(rule__XMemberFeatureCall__Group_1_1_0__0)
	{ after(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMemberFeatureCall__Group_1_1__1__Impl
	rule__XMemberFeatureCall__Group_1_1__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_1_1()); }
	(rule__XMemberFeatureCall__Group_1_1_1__0)?
	{ after(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMemberFeatureCall__Group_1_1__2__Impl
	rule__XMemberFeatureCall__Group_1_1__3
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_1__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMemberFeatureCallAccess().getFeatureAssignment_1_1_2()); }
	(rule__XMemberFeatureCall__FeatureAssignment_1_1_2)
	{ after(grammarAccess.getXMemberFeatureCallAccess().getFeatureAssignment_1_1_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_1__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMemberFeatureCall__Group_1_1__3__Impl
	rule__XMemberFeatureCall__Group_1_1__4
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_1__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_1_3()); }
	(rule__XMemberFeatureCall__Group_1_1_3__0)?
	{ after(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_1_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_1__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMemberFeatureCall__Group_1_1__4__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_1__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsAssignment_1_1_4()); }
	(rule__XMemberFeatureCall__MemberCallArgumentsAssignment_1_1_4)?
	{ after(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsAssignment_1_1_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XMemberFeatureCall__Group_1_1_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMemberFeatureCall__Group_1_1_0__0__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_1_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_1_0_0()); }
	(rule__XMemberFeatureCall__Group_1_1_0_0__0)
	{ after(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_1_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XMemberFeatureCall__Group_1_1_0_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMemberFeatureCall__Group_1_1_0_0__0__Impl
	rule__XMemberFeatureCall__Group_1_1_0_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_1_0_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMemberFeatureCallAccess().getXMemberFeatureCallMemberCallTargetAction_1_1_0_0_0()); }
	()
	{ after(grammarAccess.getXMemberFeatureCallAccess().getXMemberFeatureCallMemberCallTargetAction_1_1_0_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_1_0_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMemberFeatureCall__Group_1_1_0_0__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_1_0_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMemberFeatureCallAccess().getAlternatives_1_1_0_0_1()); }
	(rule__XMemberFeatureCall__Alternatives_1_1_0_0_1)
	{ after(grammarAccess.getXMemberFeatureCallAccess().getAlternatives_1_1_0_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XMemberFeatureCall__Group_1_1_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMemberFeatureCall__Group_1_1_1__0__Impl
	rule__XMemberFeatureCall__Group_1_1_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_1_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMemberFeatureCallAccess().getLessThanSignKeyword_1_1_1_0()); }
	'<'
	{ after(grammarAccess.getXMemberFeatureCallAccess().getLessThanSignKeyword_1_1_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_1_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMemberFeatureCall__Group_1_1_1__1__Impl
	rule__XMemberFeatureCall__Group_1_1_1__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_1_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMemberFeatureCallAccess().getTypeArgumentsAssignment_1_1_1_1()); }
	(rule__XMemberFeatureCall__TypeArgumentsAssignment_1_1_1_1)
	{ after(grammarAccess.getXMemberFeatureCallAccess().getTypeArgumentsAssignment_1_1_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_1_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMemberFeatureCall__Group_1_1_1__2__Impl
	rule__XMemberFeatureCall__Group_1_1_1__3
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_1_1__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_1_1_2()); }
	(rule__XMemberFeatureCall__Group_1_1_1_2__0)*
	{ after(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_1_1_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_1_1__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMemberFeatureCall__Group_1_1_1__3__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_1_1__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMemberFeatureCallAccess().getGreaterThanSignKeyword_1_1_1_3()); }
	'>'
	{ after(grammarAccess.getXMemberFeatureCallAccess().getGreaterThanSignKeyword_1_1_1_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XMemberFeatureCall__Group_1_1_1_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMemberFeatureCall__Group_1_1_1_2__0__Impl
	rule__XMemberFeatureCall__Group_1_1_1_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_1_1_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMemberFeatureCallAccess().getCommaKeyword_1_1_1_2_0()); }
	','
	{ after(grammarAccess.getXMemberFeatureCallAccess().getCommaKeyword_1_1_1_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_1_1_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMemberFeatureCall__Group_1_1_1_2__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_1_1_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMemberFeatureCallAccess().getTypeArgumentsAssignment_1_1_1_2_1()); }
	(rule__XMemberFeatureCall__TypeArgumentsAssignment_1_1_1_2_1)
	{ after(grammarAccess.getXMemberFeatureCallAccess().getTypeArgumentsAssignment_1_1_1_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XMemberFeatureCall__Group_1_1_3__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMemberFeatureCall__Group_1_1_3__0__Impl
	rule__XMemberFeatureCall__Group_1_1_3__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_1_3__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMemberFeatureCallAccess().getExplicitOperationCallAssignment_1_1_3_0()); }
	(rule__XMemberFeatureCall__ExplicitOperationCallAssignment_1_1_3_0)
	{ after(grammarAccess.getXMemberFeatureCallAccess().getExplicitOperationCallAssignment_1_1_3_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_1_3__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMemberFeatureCall__Group_1_1_3__1__Impl
	rule__XMemberFeatureCall__Group_1_1_3__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_1_3__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMemberFeatureCallAccess().getAlternatives_1_1_3_1()); }
	(rule__XMemberFeatureCall__Alternatives_1_1_3_1)?
	{ after(grammarAccess.getXMemberFeatureCallAccess().getAlternatives_1_1_3_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_1_3__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMemberFeatureCall__Group_1_1_3__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_1_3__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMemberFeatureCallAccess().getRightParenthesisKeyword_1_1_3_2()); }
	')'
	{ after(grammarAccess.getXMemberFeatureCallAccess().getRightParenthesisKeyword_1_1_3_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XMemberFeatureCall__Group_1_1_3_1_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMemberFeatureCall__Group_1_1_3_1_1__0__Impl
	rule__XMemberFeatureCall__Group_1_1_3_1_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_1_3_1_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsAssignment_1_1_3_1_1_0()); }
	(rule__XMemberFeatureCall__MemberCallArgumentsAssignment_1_1_3_1_1_0)
	{ after(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsAssignment_1_1_3_1_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_1_3_1_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMemberFeatureCall__Group_1_1_3_1_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_1_3_1_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_1_3_1_1_1()); }
	(rule__XMemberFeatureCall__Group_1_1_3_1_1_1__0)*
	{ after(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_1_3_1_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XMemberFeatureCall__Group_1_1_3_1_1_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMemberFeatureCall__Group_1_1_3_1_1_1__0__Impl
	rule__XMemberFeatureCall__Group_1_1_3_1_1_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_1_3_1_1_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMemberFeatureCallAccess().getCommaKeyword_1_1_3_1_1_1_0()); }
	','
	{ after(grammarAccess.getXMemberFeatureCallAccess().getCommaKeyword_1_1_3_1_1_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_1_3_1_1_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XMemberFeatureCall__Group_1_1_3_1_1_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__Group_1_1_3_1_1_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsAssignment_1_1_3_1_1_1_1()); }
	(rule__XMemberFeatureCall__MemberCallArgumentsAssignment_1_1_3_1_1_1_1)
	{ after(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsAssignment_1_1_3_1_1_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XSetLiteral__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSetLiteral__Group__0__Impl
	rule__XSetLiteral__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XSetLiteral__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXSetLiteralAccess().getXSetLiteralAction_0()); }
	()
	{ after(grammarAccess.getXSetLiteralAccess().getXSetLiteralAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XSetLiteral__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSetLiteral__Group__1__Impl
	rule__XSetLiteral__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XSetLiteral__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXSetLiteralAccess().getNumberSignKeyword_1()); }
	'#'
	{ after(grammarAccess.getXSetLiteralAccess().getNumberSignKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XSetLiteral__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSetLiteral__Group__2__Impl
	rule__XSetLiteral__Group__3
;
finally {
	restoreStackSize(stackSize);
}

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

rule__XSetLiteral__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSetLiteral__Group__3__Impl
	rule__XSetLiteral__Group__4
;
finally {
	restoreStackSize(stackSize);
}

rule__XSetLiteral__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXSetLiteralAccess().getGroup_3()); }
	(rule__XSetLiteral__Group_3__0)?
	{ after(grammarAccess.getXSetLiteralAccess().getGroup_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XSetLiteral__Group__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSetLiteral__Group__4__Impl
;
finally {
	restoreStackSize(stackSize);
}

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


rule__XSetLiteral__Group_3__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSetLiteral__Group_3__0__Impl
	rule__XSetLiteral__Group_3__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XSetLiteral__Group_3__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXSetLiteralAccess().getElementsAssignment_3_0()); }
	(rule__XSetLiteral__ElementsAssignment_3_0)
	{ after(grammarAccess.getXSetLiteralAccess().getElementsAssignment_3_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XSetLiteral__Group_3__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSetLiteral__Group_3__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XSetLiteral__Group_3__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXSetLiteralAccess().getGroup_3_1()); }
	(rule__XSetLiteral__Group_3_1__0)*
	{ after(grammarAccess.getXSetLiteralAccess().getGroup_3_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XSetLiteral__Group_3_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSetLiteral__Group_3_1__0__Impl
	rule__XSetLiteral__Group_3_1__1
;
finally {
	restoreStackSize(stackSize);
}

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

rule__XSetLiteral__Group_3_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSetLiteral__Group_3_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XSetLiteral__Group_3_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXSetLiteralAccess().getElementsAssignment_3_1_1()); }
	(rule__XSetLiteral__ElementsAssignment_3_1_1)
	{ after(grammarAccess.getXSetLiteralAccess().getElementsAssignment_3_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XListLiteral__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XListLiteral__Group__0__Impl
	rule__XListLiteral__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XListLiteral__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXListLiteralAccess().getXListLiteralAction_0()); }
	()
	{ after(grammarAccess.getXListLiteralAccess().getXListLiteralAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XListLiteral__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XListLiteral__Group__1__Impl
	rule__XListLiteral__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XListLiteral__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXListLiteralAccess().getNumberSignKeyword_1()); }
	'#'
	{ after(grammarAccess.getXListLiteralAccess().getNumberSignKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XListLiteral__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XListLiteral__Group__2__Impl
	rule__XListLiteral__Group__3
;
finally {
	restoreStackSize(stackSize);
}

rule__XListLiteral__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXListLiteralAccess().getLeftSquareBracketKeyword_2()); }
	'['
	{ after(grammarAccess.getXListLiteralAccess().getLeftSquareBracketKeyword_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XListLiteral__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XListLiteral__Group__3__Impl
	rule__XListLiteral__Group__4
;
finally {
	restoreStackSize(stackSize);
}

rule__XListLiteral__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXListLiteralAccess().getGroup_3()); }
	(rule__XListLiteral__Group_3__0)?
	{ after(grammarAccess.getXListLiteralAccess().getGroup_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XListLiteral__Group__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XListLiteral__Group__4__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XListLiteral__Group__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXListLiteralAccess().getRightSquareBracketKeyword_4()); }
	']'
	{ after(grammarAccess.getXListLiteralAccess().getRightSquareBracketKeyword_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XListLiteral__Group_3__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XListLiteral__Group_3__0__Impl
	rule__XListLiteral__Group_3__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XListLiteral__Group_3__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXListLiteralAccess().getElementsAssignment_3_0()); }
	(rule__XListLiteral__ElementsAssignment_3_0)
	{ after(grammarAccess.getXListLiteralAccess().getElementsAssignment_3_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XListLiteral__Group_3__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XListLiteral__Group_3__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XListLiteral__Group_3__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXListLiteralAccess().getGroup_3_1()); }
	(rule__XListLiteral__Group_3_1__0)*
	{ after(grammarAccess.getXListLiteralAccess().getGroup_3_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XListLiteral__Group_3_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XListLiteral__Group_3_1__0__Impl
	rule__XListLiteral__Group_3_1__1
;
finally {
	restoreStackSize(stackSize);
}

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

rule__XListLiteral__Group_3_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XListLiteral__Group_3_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XListLiteral__Group_3_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXListLiteralAccess().getElementsAssignment_3_1_1()); }
	(rule__XListLiteral__ElementsAssignment_3_1_1)
	{ after(grammarAccess.getXListLiteralAccess().getElementsAssignment_3_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XClosure__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XClosure__Group__0__Impl
	rule__XClosure__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XClosure__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXClosureAccess().getGroup_0()); }
	(rule__XClosure__Group_0__0)
	{ after(grammarAccess.getXClosureAccess().getGroup_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XClosure__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XClosure__Group__1__Impl
	rule__XClosure__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XClosure__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXClosureAccess().getGroup_1()); }
	(rule__XClosure__Group_1__0)?
	{ after(grammarAccess.getXClosureAccess().getGroup_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XClosure__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XClosure__Group__2__Impl
	rule__XClosure__Group__3
;
finally {
	restoreStackSize(stackSize);
}

rule__XClosure__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXClosureAccess().getExpressionAssignment_2()); }
	(rule__XClosure__ExpressionAssignment_2)
	{ after(grammarAccess.getXClosureAccess().getExpressionAssignment_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XClosure__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XClosure__Group__3__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XClosure__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXClosureAccess().getRightSquareBracketKeyword_3()); }
	']'
	{ after(grammarAccess.getXClosureAccess().getRightSquareBracketKeyword_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XClosure__Group_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XClosure__Group_0__0__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XClosure__Group_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXClosureAccess().getGroup_0_0()); }
	(rule__XClosure__Group_0_0__0)
	{ after(grammarAccess.getXClosureAccess().getGroup_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XClosure__Group_0_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XClosure__Group_0_0__0__Impl
	rule__XClosure__Group_0_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XClosure__Group_0_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXClosureAccess().getXClosureAction_0_0_0()); }
	()
	{ after(grammarAccess.getXClosureAccess().getXClosureAction_0_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XClosure__Group_0_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XClosure__Group_0_0__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XClosure__Group_0_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXClosureAccess().getLeftSquareBracketKeyword_0_0_1()); }
	'['
	{ after(grammarAccess.getXClosureAccess().getLeftSquareBracketKeyword_0_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XClosure__Group_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XClosure__Group_1__0__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XClosure__Group_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXClosureAccess().getGroup_1_0()); }
	(rule__XClosure__Group_1_0__0)
	{ after(grammarAccess.getXClosureAccess().getGroup_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XClosure__Group_1_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XClosure__Group_1_0__0__Impl
	rule__XClosure__Group_1_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XClosure__Group_1_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXClosureAccess().getGroup_1_0_0()); }
	(rule__XClosure__Group_1_0_0__0)?
	{ after(grammarAccess.getXClosureAccess().getGroup_1_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XClosure__Group_1_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XClosure__Group_1_0__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XClosure__Group_1_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXClosureAccess().getExplicitSyntaxAssignment_1_0_1()); }
	(rule__XClosure__ExplicitSyntaxAssignment_1_0_1)
	{ after(grammarAccess.getXClosureAccess().getExplicitSyntaxAssignment_1_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XClosure__Group_1_0_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XClosure__Group_1_0_0__0__Impl
	rule__XClosure__Group_1_0_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XClosure__Group_1_0_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXClosureAccess().getDeclaredFormalParametersAssignment_1_0_0_0()); }
	(rule__XClosure__DeclaredFormalParametersAssignment_1_0_0_0)
	{ after(grammarAccess.getXClosureAccess().getDeclaredFormalParametersAssignment_1_0_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XClosure__Group_1_0_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XClosure__Group_1_0_0__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XClosure__Group_1_0_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXClosureAccess().getGroup_1_0_0_1()); }
	(rule__XClosure__Group_1_0_0_1__0)*
	{ after(grammarAccess.getXClosureAccess().getGroup_1_0_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XClosure__Group_1_0_0_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XClosure__Group_1_0_0_1__0__Impl
	rule__XClosure__Group_1_0_0_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XClosure__Group_1_0_0_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXClosureAccess().getCommaKeyword_1_0_0_1_0()); }
	','
	{ after(grammarAccess.getXClosureAccess().getCommaKeyword_1_0_0_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XClosure__Group_1_0_0_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XClosure__Group_1_0_0_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XClosure__Group_1_0_0_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXClosureAccess().getDeclaredFormalParametersAssignment_1_0_0_1_1()); }
	(rule__XClosure__DeclaredFormalParametersAssignment_1_0_0_1_1)
	{ after(grammarAccess.getXClosureAccess().getDeclaredFormalParametersAssignment_1_0_0_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XExpressionInClosure__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XExpressionInClosure__Group__0__Impl
	rule__XExpressionInClosure__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XExpressionInClosure__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXExpressionInClosureAccess().getXBlockExpressionAction_0()); }
	()
	{ after(grammarAccess.getXExpressionInClosureAccess().getXBlockExpressionAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XExpressionInClosure__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XExpressionInClosure__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XExpressionInClosure__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXExpressionInClosureAccess().getGroup_1()); }
	(rule__XExpressionInClosure__Group_1__0)*
	{ after(grammarAccess.getXExpressionInClosureAccess().getGroup_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XExpressionInClosure__Group_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XExpressionInClosure__Group_1__0__Impl
	rule__XExpressionInClosure__Group_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XExpressionInClosure__Group_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXExpressionInClosureAccess().getExpressionsAssignment_1_0()); }
	(rule__XExpressionInClosure__ExpressionsAssignment_1_0)
	{ after(grammarAccess.getXExpressionInClosureAccess().getExpressionsAssignment_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XExpressionInClosure__Group_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XExpressionInClosure__Group_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XExpressionInClosure__Group_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXExpressionInClosureAccess().getSemicolonKeyword_1_1()); }
	(';')?
	{ after(grammarAccess.getXExpressionInClosureAccess().getSemicolonKeyword_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XShortClosure__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XShortClosure__Group__0__Impl
	rule__XShortClosure__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XShortClosure__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXShortClosureAccess().getGroup_0()); }
	(rule__XShortClosure__Group_0__0)
	{ after(grammarAccess.getXShortClosureAccess().getGroup_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XShortClosure__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XShortClosure__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XShortClosure__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXShortClosureAccess().getExpressionAssignment_1()); }
	(rule__XShortClosure__ExpressionAssignment_1)
	{ after(grammarAccess.getXShortClosureAccess().getExpressionAssignment_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XShortClosure__Group_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XShortClosure__Group_0__0__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XShortClosure__Group_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXShortClosureAccess().getGroup_0_0()); }
	(rule__XShortClosure__Group_0_0__0)
	{ after(grammarAccess.getXShortClosureAccess().getGroup_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XShortClosure__Group_0_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XShortClosure__Group_0_0__0__Impl
	rule__XShortClosure__Group_0_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XShortClosure__Group_0_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXShortClosureAccess().getXClosureAction_0_0_0()); }
	()
	{ after(grammarAccess.getXShortClosureAccess().getXClosureAction_0_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XShortClosure__Group_0_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XShortClosure__Group_0_0__1__Impl
	rule__XShortClosure__Group_0_0__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XShortClosure__Group_0_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXShortClosureAccess().getGroup_0_0_1()); }
	(rule__XShortClosure__Group_0_0_1__0)?
	{ after(grammarAccess.getXShortClosureAccess().getGroup_0_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XShortClosure__Group_0_0__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XShortClosure__Group_0_0__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XShortClosure__Group_0_0__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXShortClosureAccess().getExplicitSyntaxAssignment_0_0_2()); }
	(rule__XShortClosure__ExplicitSyntaxAssignment_0_0_2)
	{ after(grammarAccess.getXShortClosureAccess().getExplicitSyntaxAssignment_0_0_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XShortClosure__Group_0_0_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XShortClosure__Group_0_0_1__0__Impl
	rule__XShortClosure__Group_0_0_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XShortClosure__Group_0_0_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXShortClosureAccess().getDeclaredFormalParametersAssignment_0_0_1_0()); }
	(rule__XShortClosure__DeclaredFormalParametersAssignment_0_0_1_0)
	{ after(grammarAccess.getXShortClosureAccess().getDeclaredFormalParametersAssignment_0_0_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XShortClosure__Group_0_0_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XShortClosure__Group_0_0_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XShortClosure__Group_0_0_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXShortClosureAccess().getGroup_0_0_1_1()); }
	(rule__XShortClosure__Group_0_0_1_1__0)*
	{ after(grammarAccess.getXShortClosureAccess().getGroup_0_0_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XShortClosure__Group_0_0_1_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XShortClosure__Group_0_0_1_1__0__Impl
	rule__XShortClosure__Group_0_0_1_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XShortClosure__Group_0_0_1_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXShortClosureAccess().getCommaKeyword_0_0_1_1_0()); }
	','
	{ after(grammarAccess.getXShortClosureAccess().getCommaKeyword_0_0_1_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XShortClosure__Group_0_0_1_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XShortClosure__Group_0_0_1_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XShortClosure__Group_0_0_1_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXShortClosureAccess().getDeclaredFormalParametersAssignment_0_0_1_1_1()); }
	(rule__XShortClosure__DeclaredFormalParametersAssignment_0_0_1_1_1)
	{ after(grammarAccess.getXShortClosureAccess().getDeclaredFormalParametersAssignment_0_0_1_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XParenthesizedExpression__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XParenthesizedExpression__Group__0__Impl
	rule__XParenthesizedExpression__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XParenthesizedExpression__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXParenthesizedExpressionAccess().getLeftParenthesisKeyword_0()); }
	'('
	{ after(grammarAccess.getXParenthesizedExpressionAccess().getLeftParenthesisKeyword_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XParenthesizedExpression__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XParenthesizedExpression__Group__1__Impl
	rule__XParenthesizedExpression__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XParenthesizedExpression__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXParenthesizedExpressionAccess().getXExpressionParserRuleCall_1()); }
	ruleXExpression
	{ after(grammarAccess.getXParenthesizedExpressionAccess().getXExpressionParserRuleCall_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XParenthesizedExpression__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XParenthesizedExpression__Group__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XParenthesizedExpression__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXParenthesizedExpressionAccess().getRightParenthesisKeyword_2()); }
	')'
	{ after(grammarAccess.getXParenthesizedExpressionAccess().getRightParenthesisKeyword_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XIfExpression__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XIfExpression__Group__0__Impl
	rule__XIfExpression__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XIfExpression__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXIfExpressionAccess().getXIfExpressionAction_0()); }
	()
	{ after(grammarAccess.getXIfExpressionAccess().getXIfExpressionAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XIfExpression__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XIfExpression__Group__1__Impl
	rule__XIfExpression__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XIfExpression__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXIfExpressionAccess().getIfKeyword_1()); }
	'if'
	{ after(grammarAccess.getXIfExpressionAccess().getIfKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XIfExpression__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XIfExpression__Group__2__Impl
	rule__XIfExpression__Group__3
;
finally {
	restoreStackSize(stackSize);
}

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

rule__XIfExpression__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XIfExpression__Group__3__Impl
	rule__XIfExpression__Group__4
;
finally {
	restoreStackSize(stackSize);
}

rule__XIfExpression__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXIfExpressionAccess().getIfAssignment_3()); }
	(rule__XIfExpression__IfAssignment_3)
	{ after(grammarAccess.getXIfExpressionAccess().getIfAssignment_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XIfExpression__Group__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XIfExpression__Group__4__Impl
	rule__XIfExpression__Group__5
;
finally {
	restoreStackSize(stackSize);
}

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

rule__XIfExpression__Group__5
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XIfExpression__Group__5__Impl
	rule__XIfExpression__Group__6
;
finally {
	restoreStackSize(stackSize);
}

rule__XIfExpression__Group__5__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXIfExpressionAccess().getThenAssignment_5()); }
	(rule__XIfExpression__ThenAssignment_5)
	{ after(grammarAccess.getXIfExpressionAccess().getThenAssignment_5()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XIfExpression__Group__6
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XIfExpression__Group__6__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XIfExpression__Group__6__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXIfExpressionAccess().getGroup_6()); }
	(rule__XIfExpression__Group_6__0)?
	{ after(grammarAccess.getXIfExpressionAccess().getGroup_6()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XIfExpression__Group_6__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XIfExpression__Group_6__0__Impl
	rule__XIfExpression__Group_6__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XIfExpression__Group_6__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXIfExpressionAccess().getElseKeyword_6_0()); }
	('else')
	{ after(grammarAccess.getXIfExpressionAccess().getElseKeyword_6_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XIfExpression__Group_6__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XIfExpression__Group_6__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XIfExpression__Group_6__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXIfExpressionAccess().getElseAssignment_6_1()); }
	(rule__XIfExpression__ElseAssignment_6_1)
	{ after(grammarAccess.getXIfExpressionAccess().getElseAssignment_6_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XSwitchExpression__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSwitchExpression__Group__0__Impl
	rule__XSwitchExpression__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXSwitchExpressionAccess().getXSwitchExpressionAction_0()); }
	()
	{ after(grammarAccess.getXSwitchExpressionAccess().getXSwitchExpressionAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSwitchExpression__Group__1__Impl
	rule__XSwitchExpression__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXSwitchExpressionAccess().getSwitchKeyword_1()); }
	'switch'
	{ after(grammarAccess.getXSwitchExpressionAccess().getSwitchKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSwitchExpression__Group__2__Impl
	rule__XSwitchExpression__Group__3
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXSwitchExpressionAccess().getAlternatives_2()); }
	(rule__XSwitchExpression__Alternatives_2)
	{ after(grammarAccess.getXSwitchExpressionAccess().getAlternatives_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSwitchExpression__Group__3__Impl
	rule__XSwitchExpression__Group__4
;
finally {
	restoreStackSize(stackSize);
}

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

rule__XSwitchExpression__Group__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSwitchExpression__Group__4__Impl
	rule__XSwitchExpression__Group__5
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__Group__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXSwitchExpressionAccess().getCasesAssignment_4()); }
	(rule__XSwitchExpression__CasesAssignment_4)*
	{ after(grammarAccess.getXSwitchExpressionAccess().getCasesAssignment_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__Group__5
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSwitchExpression__Group__5__Impl
	rule__XSwitchExpression__Group__6
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__Group__5__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXSwitchExpressionAccess().getGroup_5()); }
	(rule__XSwitchExpression__Group_5__0)?
	{ after(grammarAccess.getXSwitchExpressionAccess().getGroup_5()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__Group__6
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSwitchExpression__Group__6__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__Group__6__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXSwitchExpressionAccess().getRightCurlyBracketKeyword_6()); }
	'}'
	{ after(grammarAccess.getXSwitchExpressionAccess().getRightCurlyBracketKeyword_6()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XSwitchExpression__Group_2_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSwitchExpression__Group_2_0__0__Impl
	rule__XSwitchExpression__Group_2_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__Group_2_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXSwitchExpressionAccess().getGroup_2_0_0()); }
	(rule__XSwitchExpression__Group_2_0_0__0)
	{ after(grammarAccess.getXSwitchExpressionAccess().getGroup_2_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__Group_2_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSwitchExpression__Group_2_0__1__Impl
	rule__XSwitchExpression__Group_2_0__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__Group_2_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXSwitchExpressionAccess().getSwitchAssignment_2_0_1()); }
	(rule__XSwitchExpression__SwitchAssignment_2_0_1)
	{ after(grammarAccess.getXSwitchExpressionAccess().getSwitchAssignment_2_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__Group_2_0__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSwitchExpression__Group_2_0__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__Group_2_0__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXSwitchExpressionAccess().getRightParenthesisKeyword_2_0_2()); }
	')'
	{ after(grammarAccess.getXSwitchExpressionAccess().getRightParenthesisKeyword_2_0_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XSwitchExpression__Group_2_0_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSwitchExpression__Group_2_0_0__0__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__Group_2_0_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXSwitchExpressionAccess().getGroup_2_0_0_0()); }
	(rule__XSwitchExpression__Group_2_0_0_0__0)
	{ after(grammarAccess.getXSwitchExpressionAccess().getGroup_2_0_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XSwitchExpression__Group_2_0_0_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSwitchExpression__Group_2_0_0_0__0__Impl
	rule__XSwitchExpression__Group_2_0_0_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__Group_2_0_0_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXSwitchExpressionAccess().getLeftParenthesisKeyword_2_0_0_0_0()); }
	'('
	{ after(grammarAccess.getXSwitchExpressionAccess().getLeftParenthesisKeyword_2_0_0_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__Group_2_0_0_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSwitchExpression__Group_2_0_0_0__1__Impl
	rule__XSwitchExpression__Group_2_0_0_0__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__Group_2_0_0_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXSwitchExpressionAccess().getDeclaredParamAssignment_2_0_0_0_1()); }
	(rule__XSwitchExpression__DeclaredParamAssignment_2_0_0_0_1)
	{ after(grammarAccess.getXSwitchExpressionAccess().getDeclaredParamAssignment_2_0_0_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__Group_2_0_0_0__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSwitchExpression__Group_2_0_0_0__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__Group_2_0_0_0__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXSwitchExpressionAccess().getColonKeyword_2_0_0_0_2()); }
	':'
	{ after(grammarAccess.getXSwitchExpressionAccess().getColonKeyword_2_0_0_0_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XSwitchExpression__Group_2_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSwitchExpression__Group_2_1__0__Impl
	rule__XSwitchExpression__Group_2_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__Group_2_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXSwitchExpressionAccess().getGroup_2_1_0()); }
	(rule__XSwitchExpression__Group_2_1_0__0)?
	{ after(grammarAccess.getXSwitchExpressionAccess().getGroup_2_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__Group_2_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSwitchExpression__Group_2_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__Group_2_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXSwitchExpressionAccess().getSwitchAssignment_2_1_1()); }
	(rule__XSwitchExpression__SwitchAssignment_2_1_1)
	{ after(grammarAccess.getXSwitchExpressionAccess().getSwitchAssignment_2_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XSwitchExpression__Group_2_1_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSwitchExpression__Group_2_1_0__0__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__Group_2_1_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXSwitchExpressionAccess().getGroup_2_1_0_0()); }
	(rule__XSwitchExpression__Group_2_1_0_0__0)
	{ after(grammarAccess.getXSwitchExpressionAccess().getGroup_2_1_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XSwitchExpression__Group_2_1_0_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSwitchExpression__Group_2_1_0_0__0__Impl
	rule__XSwitchExpression__Group_2_1_0_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__Group_2_1_0_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXSwitchExpressionAccess().getDeclaredParamAssignment_2_1_0_0_0()); }
	(rule__XSwitchExpression__DeclaredParamAssignment_2_1_0_0_0)
	{ after(grammarAccess.getXSwitchExpressionAccess().getDeclaredParamAssignment_2_1_0_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__Group_2_1_0_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSwitchExpression__Group_2_1_0_0__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__Group_2_1_0_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXSwitchExpressionAccess().getColonKeyword_2_1_0_0_1()); }
	':'
	{ after(grammarAccess.getXSwitchExpressionAccess().getColonKeyword_2_1_0_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XSwitchExpression__Group_5__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSwitchExpression__Group_5__0__Impl
	rule__XSwitchExpression__Group_5__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__Group_5__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXSwitchExpressionAccess().getDefaultKeyword_5_0()); }
	'default'
	{ after(grammarAccess.getXSwitchExpressionAccess().getDefaultKeyword_5_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__Group_5__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSwitchExpression__Group_5__1__Impl
	rule__XSwitchExpression__Group_5__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__Group_5__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXSwitchExpressionAccess().getColonKeyword_5_1()); }
	':'
	{ after(grammarAccess.getXSwitchExpressionAccess().getColonKeyword_5_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__Group_5__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSwitchExpression__Group_5__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__Group_5__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXSwitchExpressionAccess().getDefaultAssignment_5_2()); }
	(rule__XSwitchExpression__DefaultAssignment_5_2)
	{ after(grammarAccess.getXSwitchExpressionAccess().getDefaultAssignment_5_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XCasePart__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XCasePart__Group__0__Impl
	rule__XCasePart__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XCasePart__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXCasePartAccess().getXCasePartAction_0()); }
	()
	{ after(grammarAccess.getXCasePartAccess().getXCasePartAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XCasePart__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XCasePart__Group__1__Impl
	rule__XCasePart__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XCasePart__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXCasePartAccess().getTypeGuardAssignment_1()); }
	(rule__XCasePart__TypeGuardAssignment_1)?
	{ after(grammarAccess.getXCasePartAccess().getTypeGuardAssignment_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XCasePart__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XCasePart__Group__2__Impl
	rule__XCasePart__Group__3
;
finally {
	restoreStackSize(stackSize);
}

rule__XCasePart__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXCasePartAccess().getGroup_2()); }
	(rule__XCasePart__Group_2__0)?
	{ after(grammarAccess.getXCasePartAccess().getGroup_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XCasePart__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XCasePart__Group__3__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XCasePart__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXCasePartAccess().getAlternatives_3()); }
	(rule__XCasePart__Alternatives_3)
	{ after(grammarAccess.getXCasePartAccess().getAlternatives_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XCasePart__Group_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XCasePart__Group_2__0__Impl
	rule__XCasePart__Group_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XCasePart__Group_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXCasePartAccess().getCaseKeyword_2_0()); }
	'case'
	{ after(grammarAccess.getXCasePartAccess().getCaseKeyword_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XCasePart__Group_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XCasePart__Group_2__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XCasePart__Group_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXCasePartAccess().getCaseAssignment_2_1()); }
	(rule__XCasePart__CaseAssignment_2_1)
	{ after(grammarAccess.getXCasePartAccess().getCaseAssignment_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XCasePart__Group_3_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XCasePart__Group_3_0__0__Impl
	rule__XCasePart__Group_3_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XCasePart__Group_3_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXCasePartAccess().getColonKeyword_3_0_0()); }
	':'
	{ after(grammarAccess.getXCasePartAccess().getColonKeyword_3_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XCasePart__Group_3_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XCasePart__Group_3_0__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XCasePart__Group_3_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXCasePartAccess().getThenAssignment_3_0_1()); }
	(rule__XCasePart__ThenAssignment_3_0_1)
	{ after(grammarAccess.getXCasePartAccess().getThenAssignment_3_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XForLoopExpression__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XForLoopExpression__Group__0__Impl
	rule__XForLoopExpression__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XForLoopExpression__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXForLoopExpressionAccess().getGroup_0()); }
	(rule__XForLoopExpression__Group_0__0)
	{ after(grammarAccess.getXForLoopExpressionAccess().getGroup_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XForLoopExpression__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XForLoopExpression__Group__1__Impl
	rule__XForLoopExpression__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XForLoopExpression__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXForLoopExpressionAccess().getForExpressionAssignment_1()); }
	(rule__XForLoopExpression__ForExpressionAssignment_1)
	{ after(grammarAccess.getXForLoopExpressionAccess().getForExpressionAssignment_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XForLoopExpression__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XForLoopExpression__Group__2__Impl
	rule__XForLoopExpression__Group__3
;
finally {
	restoreStackSize(stackSize);
}

rule__XForLoopExpression__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXForLoopExpressionAccess().getRightParenthesisKeyword_2()); }
	')'
	{ after(grammarAccess.getXForLoopExpressionAccess().getRightParenthesisKeyword_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XForLoopExpression__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XForLoopExpression__Group__3__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XForLoopExpression__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXForLoopExpressionAccess().getEachExpressionAssignment_3()); }
	(rule__XForLoopExpression__EachExpressionAssignment_3)
	{ after(grammarAccess.getXForLoopExpressionAccess().getEachExpressionAssignment_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XForLoopExpression__Group_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XForLoopExpression__Group_0__0__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XForLoopExpression__Group_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXForLoopExpressionAccess().getGroup_0_0()); }
	(rule__XForLoopExpression__Group_0_0__0)
	{ after(grammarAccess.getXForLoopExpressionAccess().getGroup_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XForLoopExpression__Group_0_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XForLoopExpression__Group_0_0__0__Impl
	rule__XForLoopExpression__Group_0_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XForLoopExpression__Group_0_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXForLoopExpressionAccess().getXForLoopExpressionAction_0_0_0()); }
	()
	{ after(grammarAccess.getXForLoopExpressionAccess().getXForLoopExpressionAction_0_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XForLoopExpression__Group_0_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XForLoopExpression__Group_0_0__1__Impl
	rule__XForLoopExpression__Group_0_0__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XForLoopExpression__Group_0_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXForLoopExpressionAccess().getForKeyword_0_0_1()); }
	'for'
	{ after(grammarAccess.getXForLoopExpressionAccess().getForKeyword_0_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XForLoopExpression__Group_0_0__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XForLoopExpression__Group_0_0__2__Impl
	rule__XForLoopExpression__Group_0_0__3
;
finally {
	restoreStackSize(stackSize);
}

rule__XForLoopExpression__Group_0_0__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXForLoopExpressionAccess().getLeftParenthesisKeyword_0_0_2()); }
	'('
	{ after(grammarAccess.getXForLoopExpressionAccess().getLeftParenthesisKeyword_0_0_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XForLoopExpression__Group_0_0__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XForLoopExpression__Group_0_0__3__Impl
	rule__XForLoopExpression__Group_0_0__4
;
finally {
	restoreStackSize(stackSize);
}

rule__XForLoopExpression__Group_0_0__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXForLoopExpressionAccess().getDeclaredParamAssignment_0_0_3()); }
	(rule__XForLoopExpression__DeclaredParamAssignment_0_0_3)
	{ after(grammarAccess.getXForLoopExpressionAccess().getDeclaredParamAssignment_0_0_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XForLoopExpression__Group_0_0__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XForLoopExpression__Group_0_0__4__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XForLoopExpression__Group_0_0__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXForLoopExpressionAccess().getColonKeyword_0_0_4()); }
	':'
	{ after(grammarAccess.getXForLoopExpressionAccess().getColonKeyword_0_0_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XBasicForLoopExpression__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XBasicForLoopExpression__Group__0__Impl
	rule__XBasicForLoopExpression__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XBasicForLoopExpression__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXBasicForLoopExpressionAccess().getXBasicForLoopExpressionAction_0()); }
	()
	{ after(grammarAccess.getXBasicForLoopExpressionAccess().getXBasicForLoopExpressionAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XBasicForLoopExpression__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XBasicForLoopExpression__Group__1__Impl
	rule__XBasicForLoopExpression__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XBasicForLoopExpression__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXBasicForLoopExpressionAccess().getForKeyword_1()); }
	'for'
	{ after(grammarAccess.getXBasicForLoopExpressionAccess().getForKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XBasicForLoopExpression__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XBasicForLoopExpression__Group__2__Impl
	rule__XBasicForLoopExpression__Group__3
;
finally {
	restoreStackSize(stackSize);
}

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

rule__XBasicForLoopExpression__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XBasicForLoopExpression__Group__3__Impl
	rule__XBasicForLoopExpression__Group__4
;
finally {
	restoreStackSize(stackSize);
}

rule__XBasicForLoopExpression__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXBasicForLoopExpressionAccess().getGroup_3()); }
	(rule__XBasicForLoopExpression__Group_3__0)?
	{ after(grammarAccess.getXBasicForLoopExpressionAccess().getGroup_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XBasicForLoopExpression__Group__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XBasicForLoopExpression__Group__4__Impl
	rule__XBasicForLoopExpression__Group__5
;
finally {
	restoreStackSize(stackSize);
}

rule__XBasicForLoopExpression__Group__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXBasicForLoopExpressionAccess().getSemicolonKeyword_4()); }
	';'
	{ after(grammarAccess.getXBasicForLoopExpressionAccess().getSemicolonKeyword_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XBasicForLoopExpression__Group__5
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XBasicForLoopExpression__Group__5__Impl
	rule__XBasicForLoopExpression__Group__6
;
finally {
	restoreStackSize(stackSize);
}

rule__XBasicForLoopExpression__Group__5__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXBasicForLoopExpressionAccess().getExpressionAssignment_5()); }
	(rule__XBasicForLoopExpression__ExpressionAssignment_5)?
	{ after(grammarAccess.getXBasicForLoopExpressionAccess().getExpressionAssignment_5()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XBasicForLoopExpression__Group__6
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XBasicForLoopExpression__Group__6__Impl
	rule__XBasicForLoopExpression__Group__7
;
finally {
	restoreStackSize(stackSize);
}

rule__XBasicForLoopExpression__Group__6__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXBasicForLoopExpressionAccess().getSemicolonKeyword_6()); }
	';'
	{ after(grammarAccess.getXBasicForLoopExpressionAccess().getSemicolonKeyword_6()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XBasicForLoopExpression__Group__7
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XBasicForLoopExpression__Group__7__Impl
	rule__XBasicForLoopExpression__Group__8
;
finally {
	restoreStackSize(stackSize);
}

rule__XBasicForLoopExpression__Group__7__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXBasicForLoopExpressionAccess().getGroup_7()); }
	(rule__XBasicForLoopExpression__Group_7__0)?
	{ after(grammarAccess.getXBasicForLoopExpressionAccess().getGroup_7()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XBasicForLoopExpression__Group__8
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XBasicForLoopExpression__Group__8__Impl
	rule__XBasicForLoopExpression__Group__9
;
finally {
	restoreStackSize(stackSize);
}

rule__XBasicForLoopExpression__Group__8__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXBasicForLoopExpressionAccess().getRightParenthesisKeyword_8()); }
	')'
	{ after(grammarAccess.getXBasicForLoopExpressionAccess().getRightParenthesisKeyword_8()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XBasicForLoopExpression__Group__9
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XBasicForLoopExpression__Group__9__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XBasicForLoopExpression__Group__9__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXBasicForLoopExpressionAccess().getEachExpressionAssignment_9()); }
	(rule__XBasicForLoopExpression__EachExpressionAssignment_9)
	{ after(grammarAccess.getXBasicForLoopExpressionAccess().getEachExpressionAssignment_9()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XBasicForLoopExpression__Group_3__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XBasicForLoopExpression__Group_3__0__Impl
	rule__XBasicForLoopExpression__Group_3__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XBasicForLoopExpression__Group_3__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXBasicForLoopExpressionAccess().getInitExpressionsAssignment_3_0()); }
	(rule__XBasicForLoopExpression__InitExpressionsAssignment_3_0)
	{ after(grammarAccess.getXBasicForLoopExpressionAccess().getInitExpressionsAssignment_3_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XBasicForLoopExpression__Group_3__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XBasicForLoopExpression__Group_3__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XBasicForLoopExpression__Group_3__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXBasicForLoopExpressionAccess().getGroup_3_1()); }
	(rule__XBasicForLoopExpression__Group_3_1__0)*
	{ after(grammarAccess.getXBasicForLoopExpressionAccess().getGroup_3_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XBasicForLoopExpression__Group_3_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XBasicForLoopExpression__Group_3_1__0__Impl
	rule__XBasicForLoopExpression__Group_3_1__1
;
finally {
	restoreStackSize(stackSize);
}

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

rule__XBasicForLoopExpression__Group_3_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XBasicForLoopExpression__Group_3_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XBasicForLoopExpression__Group_3_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXBasicForLoopExpressionAccess().getInitExpressionsAssignment_3_1_1()); }
	(rule__XBasicForLoopExpression__InitExpressionsAssignment_3_1_1)
	{ after(grammarAccess.getXBasicForLoopExpressionAccess().getInitExpressionsAssignment_3_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XBasicForLoopExpression__Group_7__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XBasicForLoopExpression__Group_7__0__Impl
	rule__XBasicForLoopExpression__Group_7__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XBasicForLoopExpression__Group_7__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXBasicForLoopExpressionAccess().getUpdateExpressionsAssignment_7_0()); }
	(rule__XBasicForLoopExpression__UpdateExpressionsAssignment_7_0)
	{ after(grammarAccess.getXBasicForLoopExpressionAccess().getUpdateExpressionsAssignment_7_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XBasicForLoopExpression__Group_7__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XBasicForLoopExpression__Group_7__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XBasicForLoopExpression__Group_7__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXBasicForLoopExpressionAccess().getGroup_7_1()); }
	(rule__XBasicForLoopExpression__Group_7_1__0)*
	{ after(grammarAccess.getXBasicForLoopExpressionAccess().getGroup_7_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XBasicForLoopExpression__Group_7_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XBasicForLoopExpression__Group_7_1__0__Impl
	rule__XBasicForLoopExpression__Group_7_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XBasicForLoopExpression__Group_7_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXBasicForLoopExpressionAccess().getCommaKeyword_7_1_0()); }
	','
	{ after(grammarAccess.getXBasicForLoopExpressionAccess().getCommaKeyword_7_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XBasicForLoopExpression__Group_7_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XBasicForLoopExpression__Group_7_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XBasicForLoopExpression__Group_7_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXBasicForLoopExpressionAccess().getUpdateExpressionsAssignment_7_1_1()); }
	(rule__XBasicForLoopExpression__UpdateExpressionsAssignment_7_1_1)
	{ after(grammarAccess.getXBasicForLoopExpressionAccess().getUpdateExpressionsAssignment_7_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XWhileExpression__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XWhileExpression__Group__0__Impl
	rule__XWhileExpression__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XWhileExpression__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXWhileExpressionAccess().getXWhileExpressionAction_0()); }
	()
	{ after(grammarAccess.getXWhileExpressionAccess().getXWhileExpressionAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XWhileExpression__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XWhileExpression__Group__1__Impl
	rule__XWhileExpression__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XWhileExpression__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXWhileExpressionAccess().getWhileKeyword_1()); }
	'while'
	{ after(grammarAccess.getXWhileExpressionAccess().getWhileKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XWhileExpression__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XWhileExpression__Group__2__Impl
	rule__XWhileExpression__Group__3
;
finally {
	restoreStackSize(stackSize);
}

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

rule__XWhileExpression__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XWhileExpression__Group__3__Impl
	rule__XWhileExpression__Group__4
;
finally {
	restoreStackSize(stackSize);
}

rule__XWhileExpression__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXWhileExpressionAccess().getPredicateAssignment_3()); }
	(rule__XWhileExpression__PredicateAssignment_3)
	{ after(grammarAccess.getXWhileExpressionAccess().getPredicateAssignment_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XWhileExpression__Group__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XWhileExpression__Group__4__Impl
	rule__XWhileExpression__Group__5
;
finally {
	restoreStackSize(stackSize);
}

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

rule__XWhileExpression__Group__5
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XWhileExpression__Group__5__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XWhileExpression__Group__5__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXWhileExpressionAccess().getBodyAssignment_5()); }
	(rule__XWhileExpression__BodyAssignment_5)
	{ after(grammarAccess.getXWhileExpressionAccess().getBodyAssignment_5()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XDoWhileExpression__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XDoWhileExpression__Group__0__Impl
	rule__XDoWhileExpression__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XDoWhileExpression__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXDoWhileExpressionAccess().getXDoWhileExpressionAction_0()); }
	()
	{ after(grammarAccess.getXDoWhileExpressionAccess().getXDoWhileExpressionAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XDoWhileExpression__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XDoWhileExpression__Group__1__Impl
	rule__XDoWhileExpression__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XDoWhileExpression__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXDoWhileExpressionAccess().getDoKeyword_1()); }
	'do'
	{ after(grammarAccess.getXDoWhileExpressionAccess().getDoKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XDoWhileExpression__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XDoWhileExpression__Group__2__Impl
	rule__XDoWhileExpression__Group__3
;
finally {
	restoreStackSize(stackSize);
}

rule__XDoWhileExpression__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXDoWhileExpressionAccess().getBodyAssignment_2()); }
	(rule__XDoWhileExpression__BodyAssignment_2)
	{ after(grammarAccess.getXDoWhileExpressionAccess().getBodyAssignment_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XDoWhileExpression__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XDoWhileExpression__Group__3__Impl
	rule__XDoWhileExpression__Group__4
;
finally {
	restoreStackSize(stackSize);
}

rule__XDoWhileExpression__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXDoWhileExpressionAccess().getWhileKeyword_3()); }
	'while'
	{ after(grammarAccess.getXDoWhileExpressionAccess().getWhileKeyword_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XDoWhileExpression__Group__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XDoWhileExpression__Group__4__Impl
	rule__XDoWhileExpression__Group__5
;
finally {
	restoreStackSize(stackSize);
}

rule__XDoWhileExpression__Group__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXDoWhileExpressionAccess().getLeftParenthesisKeyword_4()); }
	'('
	{ after(grammarAccess.getXDoWhileExpressionAccess().getLeftParenthesisKeyword_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XDoWhileExpression__Group__5
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XDoWhileExpression__Group__5__Impl
	rule__XDoWhileExpression__Group__6
;
finally {
	restoreStackSize(stackSize);
}

rule__XDoWhileExpression__Group__5__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXDoWhileExpressionAccess().getPredicateAssignment_5()); }
	(rule__XDoWhileExpression__PredicateAssignment_5)
	{ after(grammarAccess.getXDoWhileExpressionAccess().getPredicateAssignment_5()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XDoWhileExpression__Group__6
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XDoWhileExpression__Group__6__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XDoWhileExpression__Group__6__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXDoWhileExpressionAccess().getRightParenthesisKeyword_6()); }
	')'
	{ after(grammarAccess.getXDoWhileExpressionAccess().getRightParenthesisKeyword_6()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XBlockExpression__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XBlockExpression__Group__0__Impl
	rule__XBlockExpression__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XBlockExpression__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXBlockExpressionAccess().getXBlockExpressionAction_0()); }
	()
	{ after(grammarAccess.getXBlockExpressionAccess().getXBlockExpressionAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XBlockExpression__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XBlockExpression__Group__1__Impl
	rule__XBlockExpression__Group__2
;
finally {
	restoreStackSize(stackSize);
}

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

rule__XBlockExpression__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XBlockExpression__Group__2__Impl
	rule__XBlockExpression__Group__3
;
finally {
	restoreStackSize(stackSize);
}

rule__XBlockExpression__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXBlockExpressionAccess().getGroup_2()); }
	(rule__XBlockExpression__Group_2__0)*
	{ after(grammarAccess.getXBlockExpressionAccess().getGroup_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XBlockExpression__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XBlockExpression__Group__3__Impl
;
finally {
	restoreStackSize(stackSize);
}

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


rule__XBlockExpression__Group_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XBlockExpression__Group_2__0__Impl
	rule__XBlockExpression__Group_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XBlockExpression__Group_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXBlockExpressionAccess().getExpressionsAssignment_2_0()); }
	(rule__XBlockExpression__ExpressionsAssignment_2_0)
	{ after(grammarAccess.getXBlockExpressionAccess().getExpressionsAssignment_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XBlockExpression__Group_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XBlockExpression__Group_2__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XBlockExpression__Group_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXBlockExpressionAccess().getSemicolonKeyword_2_1()); }
	(';')?
	{ after(grammarAccess.getXBlockExpressionAccess().getSemicolonKeyword_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XVariableDeclaration__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XVariableDeclaration__Group__0__Impl
	rule__XVariableDeclaration__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XVariableDeclaration__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXVariableDeclarationAccess().getXVariableDeclarationAction_0()); }
	()
	{ after(grammarAccess.getXVariableDeclarationAccess().getXVariableDeclarationAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XVariableDeclaration__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XVariableDeclaration__Group__1__Impl
	rule__XVariableDeclaration__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XVariableDeclaration__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXVariableDeclarationAccess().getAlternatives_1()); }
	(rule__XVariableDeclaration__Alternatives_1)
	{ after(grammarAccess.getXVariableDeclarationAccess().getAlternatives_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XVariableDeclaration__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XVariableDeclaration__Group__2__Impl
	rule__XVariableDeclaration__Group__3
;
finally {
	restoreStackSize(stackSize);
}

rule__XVariableDeclaration__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXVariableDeclarationAccess().getAlternatives_2()); }
	(rule__XVariableDeclaration__Alternatives_2)
	{ after(grammarAccess.getXVariableDeclarationAccess().getAlternatives_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XVariableDeclaration__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XVariableDeclaration__Group__3__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XVariableDeclaration__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXVariableDeclarationAccess().getGroup_3()); }
	(rule__XVariableDeclaration__Group_3__0)?
	{ after(grammarAccess.getXVariableDeclarationAccess().getGroup_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XVariableDeclaration__Group_2_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XVariableDeclaration__Group_2_0__0__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XVariableDeclaration__Group_2_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXVariableDeclarationAccess().getGroup_2_0_0()); }
	(rule__XVariableDeclaration__Group_2_0_0__0)
	{ after(grammarAccess.getXVariableDeclarationAccess().getGroup_2_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XVariableDeclaration__Group_2_0_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XVariableDeclaration__Group_2_0_0__0__Impl
	rule__XVariableDeclaration__Group_2_0_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XVariableDeclaration__Group_2_0_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXVariableDeclarationAccess().getTypeAssignment_2_0_0_0()); }
	(rule__XVariableDeclaration__TypeAssignment_2_0_0_0)
	{ after(grammarAccess.getXVariableDeclarationAccess().getTypeAssignment_2_0_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XVariableDeclaration__Group_2_0_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XVariableDeclaration__Group_2_0_0__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XVariableDeclaration__Group_2_0_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXVariableDeclarationAccess().getNameAssignment_2_0_0_1()); }
	(rule__XVariableDeclaration__NameAssignment_2_0_0_1)
	{ after(grammarAccess.getXVariableDeclarationAccess().getNameAssignment_2_0_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XVariableDeclaration__Group_3__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XVariableDeclaration__Group_3__0__Impl
	rule__XVariableDeclaration__Group_3__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XVariableDeclaration__Group_3__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXVariableDeclarationAccess().getEqualsSignKeyword_3_0()); }
	'='
	{ after(grammarAccess.getXVariableDeclarationAccess().getEqualsSignKeyword_3_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XVariableDeclaration__Group_3__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XVariableDeclaration__Group_3__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XVariableDeclaration__Group_3__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXVariableDeclarationAccess().getRightAssignment_3_1()); }
	(rule__XVariableDeclaration__RightAssignment_3_1)
	{ after(grammarAccess.getXVariableDeclarationAccess().getRightAssignment_3_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__JvmFormalParameter__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmFormalParameter__Group__0__Impl
	rule__JvmFormalParameter__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmFormalParameter__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmFormalParameterAccess().getParameterTypeAssignment_0()); }
	(rule__JvmFormalParameter__ParameterTypeAssignment_0)?
	{ after(grammarAccess.getJvmFormalParameterAccess().getParameterTypeAssignment_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmFormalParameter__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmFormalParameter__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmFormalParameter__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmFormalParameterAccess().getNameAssignment_1()); }
	(rule__JvmFormalParameter__NameAssignment_1)
	{ after(grammarAccess.getJvmFormalParameterAccess().getNameAssignment_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__FullJvmFormalParameter__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__FullJvmFormalParameter__Group__0__Impl
	rule__FullJvmFormalParameter__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__FullJvmFormalParameter__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getFullJvmFormalParameterAccess().getParameterTypeAssignment_0()); }
	(rule__FullJvmFormalParameter__ParameterTypeAssignment_0)
	{ after(grammarAccess.getFullJvmFormalParameterAccess().getParameterTypeAssignment_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__FullJvmFormalParameter__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__FullJvmFormalParameter__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__FullJvmFormalParameter__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getFullJvmFormalParameterAccess().getNameAssignment_1()); }
	(rule__FullJvmFormalParameter__NameAssignment_1)
	{ after(grammarAccess.getFullJvmFormalParameterAccess().getNameAssignment_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XFeatureCall__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XFeatureCall__Group__0__Impl
	rule__XFeatureCall__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXFeatureCallAccess().getXFeatureCallAction_0()); }
	()
	{ after(grammarAccess.getXFeatureCallAccess().getXFeatureCallAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XFeatureCall__Group__1__Impl
	rule__XFeatureCall__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXFeatureCallAccess().getGroup_1()); }
	(rule__XFeatureCall__Group_1__0)?
	{ after(grammarAccess.getXFeatureCallAccess().getGroup_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XFeatureCall__Group__2__Impl
	rule__XFeatureCall__Group__3
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXFeatureCallAccess().getFeatureAssignment_2()); }
	(rule__XFeatureCall__FeatureAssignment_2)
	{ after(grammarAccess.getXFeatureCallAccess().getFeatureAssignment_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XFeatureCall__Group__3__Impl
	rule__XFeatureCall__Group__4
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXFeatureCallAccess().getGroup_3()); }
	(rule__XFeatureCall__Group_3__0)?
	{ after(grammarAccess.getXFeatureCallAccess().getGroup_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__Group__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XFeatureCall__Group__4__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__Group__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsAssignment_4()); }
	(rule__XFeatureCall__FeatureCallArgumentsAssignment_4)?
	{ after(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsAssignment_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XFeatureCall__Group_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XFeatureCall__Group_1__0__Impl
	rule__XFeatureCall__Group_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__Group_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXFeatureCallAccess().getLessThanSignKeyword_1_0()); }
	'<'
	{ after(grammarAccess.getXFeatureCallAccess().getLessThanSignKeyword_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__Group_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XFeatureCall__Group_1__1__Impl
	rule__XFeatureCall__Group_1__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__Group_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXFeatureCallAccess().getTypeArgumentsAssignment_1_1()); }
	(rule__XFeatureCall__TypeArgumentsAssignment_1_1)
	{ after(grammarAccess.getXFeatureCallAccess().getTypeArgumentsAssignment_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__Group_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XFeatureCall__Group_1__2__Impl
	rule__XFeatureCall__Group_1__3
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__Group_1__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXFeatureCallAccess().getGroup_1_2()); }
	(rule__XFeatureCall__Group_1_2__0)*
	{ after(grammarAccess.getXFeatureCallAccess().getGroup_1_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__Group_1__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XFeatureCall__Group_1__3__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__Group_1__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXFeatureCallAccess().getGreaterThanSignKeyword_1_3()); }
	'>'
	{ after(grammarAccess.getXFeatureCallAccess().getGreaterThanSignKeyword_1_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XFeatureCall__Group_1_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XFeatureCall__Group_1_2__0__Impl
	rule__XFeatureCall__Group_1_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__Group_1_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXFeatureCallAccess().getCommaKeyword_1_2_0()); }
	','
	{ after(grammarAccess.getXFeatureCallAccess().getCommaKeyword_1_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__Group_1_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XFeatureCall__Group_1_2__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__Group_1_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXFeatureCallAccess().getTypeArgumentsAssignment_1_2_1()); }
	(rule__XFeatureCall__TypeArgumentsAssignment_1_2_1)
	{ after(grammarAccess.getXFeatureCallAccess().getTypeArgumentsAssignment_1_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XFeatureCall__Group_3__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XFeatureCall__Group_3__0__Impl
	rule__XFeatureCall__Group_3__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__Group_3__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXFeatureCallAccess().getExplicitOperationCallAssignment_3_0()); }
	(rule__XFeatureCall__ExplicitOperationCallAssignment_3_0)
	{ after(grammarAccess.getXFeatureCallAccess().getExplicitOperationCallAssignment_3_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__Group_3__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XFeatureCall__Group_3__1__Impl
	rule__XFeatureCall__Group_3__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__Group_3__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXFeatureCallAccess().getAlternatives_3_1()); }
	(rule__XFeatureCall__Alternatives_3_1)?
	{ after(grammarAccess.getXFeatureCallAccess().getAlternatives_3_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__Group_3__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XFeatureCall__Group_3__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__Group_3__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXFeatureCallAccess().getRightParenthesisKeyword_3_2()); }
	')'
	{ after(grammarAccess.getXFeatureCallAccess().getRightParenthesisKeyword_3_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XFeatureCall__Group_3_1_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XFeatureCall__Group_3_1_1__0__Impl
	rule__XFeatureCall__Group_3_1_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__Group_3_1_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsAssignment_3_1_1_0()); }
	(rule__XFeatureCall__FeatureCallArgumentsAssignment_3_1_1_0)
	{ after(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsAssignment_3_1_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__Group_3_1_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XFeatureCall__Group_3_1_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__Group_3_1_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXFeatureCallAccess().getGroup_3_1_1_1()); }
	(rule__XFeatureCall__Group_3_1_1_1__0)*
	{ after(grammarAccess.getXFeatureCallAccess().getGroup_3_1_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XFeatureCall__Group_3_1_1_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XFeatureCall__Group_3_1_1_1__0__Impl
	rule__XFeatureCall__Group_3_1_1_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__Group_3_1_1_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXFeatureCallAccess().getCommaKeyword_3_1_1_1_0()); }
	','
	{ after(grammarAccess.getXFeatureCallAccess().getCommaKeyword_3_1_1_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__Group_3_1_1_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XFeatureCall__Group_3_1_1_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__Group_3_1_1_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsAssignment_3_1_1_1_1()); }
	(rule__XFeatureCall__FeatureCallArgumentsAssignment_3_1_1_1_1)
	{ after(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsAssignment_3_1_1_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XConstructorCall__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XConstructorCall__Group__0__Impl
	rule__XConstructorCall__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXConstructorCallAccess().getXConstructorCallAction_0()); }
	()
	{ after(grammarAccess.getXConstructorCallAccess().getXConstructorCallAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XConstructorCall__Group__1__Impl
	rule__XConstructorCall__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXConstructorCallAccess().getNewKeyword_1()); }
	'new'
	{ after(grammarAccess.getXConstructorCallAccess().getNewKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XConstructorCall__Group__2__Impl
	rule__XConstructorCall__Group__3
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXConstructorCallAccess().getConstructorAssignment_2()); }
	(rule__XConstructorCall__ConstructorAssignment_2)
	{ after(grammarAccess.getXConstructorCallAccess().getConstructorAssignment_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XConstructorCall__Group__3__Impl
	rule__XConstructorCall__Group__4
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXConstructorCallAccess().getGroup_3()); }
	(rule__XConstructorCall__Group_3__0)?
	{ after(grammarAccess.getXConstructorCallAccess().getGroup_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__Group__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XConstructorCall__Group__4__Impl
	rule__XConstructorCall__Group__5
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__Group__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXConstructorCallAccess().getGroup_4()); }
	(rule__XConstructorCall__Group_4__0)?
	{ after(grammarAccess.getXConstructorCallAccess().getGroup_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__Group__5
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XConstructorCall__Group__5__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__Group__5__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXConstructorCallAccess().getArgumentsAssignment_5()); }
	(rule__XConstructorCall__ArgumentsAssignment_5)?
	{ after(grammarAccess.getXConstructorCallAccess().getArgumentsAssignment_5()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XConstructorCall__Group_3__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XConstructorCall__Group_3__0__Impl
	rule__XConstructorCall__Group_3__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__Group_3__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXConstructorCallAccess().getLessThanSignKeyword_3_0()); }
	('<')
	{ after(grammarAccess.getXConstructorCallAccess().getLessThanSignKeyword_3_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__Group_3__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XConstructorCall__Group_3__1__Impl
	rule__XConstructorCall__Group_3__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__Group_3__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXConstructorCallAccess().getTypeArgumentsAssignment_3_1()); }
	(rule__XConstructorCall__TypeArgumentsAssignment_3_1)
	{ after(grammarAccess.getXConstructorCallAccess().getTypeArgumentsAssignment_3_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__Group_3__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XConstructorCall__Group_3__2__Impl
	rule__XConstructorCall__Group_3__3
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__Group_3__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXConstructorCallAccess().getGroup_3_2()); }
	(rule__XConstructorCall__Group_3_2__0)*
	{ after(grammarAccess.getXConstructorCallAccess().getGroup_3_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__Group_3__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XConstructorCall__Group_3__3__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__Group_3__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXConstructorCallAccess().getGreaterThanSignKeyword_3_3()); }
	'>'
	{ after(grammarAccess.getXConstructorCallAccess().getGreaterThanSignKeyword_3_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XConstructorCall__Group_3_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XConstructorCall__Group_3_2__0__Impl
	rule__XConstructorCall__Group_3_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__Group_3_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXConstructorCallAccess().getCommaKeyword_3_2_0()); }
	','
	{ after(grammarAccess.getXConstructorCallAccess().getCommaKeyword_3_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__Group_3_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XConstructorCall__Group_3_2__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__Group_3_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXConstructorCallAccess().getTypeArgumentsAssignment_3_2_1()); }
	(rule__XConstructorCall__TypeArgumentsAssignment_3_2_1)
	{ after(grammarAccess.getXConstructorCallAccess().getTypeArgumentsAssignment_3_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XConstructorCall__Group_4__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XConstructorCall__Group_4__0__Impl
	rule__XConstructorCall__Group_4__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__Group_4__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXConstructorCallAccess().getExplicitConstructorCallAssignment_4_0()); }
	(rule__XConstructorCall__ExplicitConstructorCallAssignment_4_0)
	{ after(grammarAccess.getXConstructorCallAccess().getExplicitConstructorCallAssignment_4_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__Group_4__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XConstructorCall__Group_4__1__Impl
	rule__XConstructorCall__Group_4__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__Group_4__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXConstructorCallAccess().getAlternatives_4_1()); }
	(rule__XConstructorCall__Alternatives_4_1)?
	{ after(grammarAccess.getXConstructorCallAccess().getAlternatives_4_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__Group_4__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XConstructorCall__Group_4__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__Group_4__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXConstructorCallAccess().getRightParenthesisKeyword_4_2()); }
	')'
	{ after(grammarAccess.getXConstructorCallAccess().getRightParenthesisKeyword_4_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XConstructorCall__Group_4_1_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XConstructorCall__Group_4_1_1__0__Impl
	rule__XConstructorCall__Group_4_1_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__Group_4_1_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXConstructorCallAccess().getArgumentsAssignment_4_1_1_0()); }
	(rule__XConstructorCall__ArgumentsAssignment_4_1_1_0)
	{ after(grammarAccess.getXConstructorCallAccess().getArgumentsAssignment_4_1_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__Group_4_1_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XConstructorCall__Group_4_1_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__Group_4_1_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXConstructorCallAccess().getGroup_4_1_1_1()); }
	(rule__XConstructorCall__Group_4_1_1_1__0)*
	{ after(grammarAccess.getXConstructorCallAccess().getGroup_4_1_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XConstructorCall__Group_4_1_1_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XConstructorCall__Group_4_1_1_1__0__Impl
	rule__XConstructorCall__Group_4_1_1_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__Group_4_1_1_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXConstructorCallAccess().getCommaKeyword_4_1_1_1_0()); }
	','
	{ after(grammarAccess.getXConstructorCallAccess().getCommaKeyword_4_1_1_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__Group_4_1_1_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XConstructorCall__Group_4_1_1_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__Group_4_1_1_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXConstructorCallAccess().getArgumentsAssignment_4_1_1_1_1()); }
	(rule__XConstructorCall__ArgumentsAssignment_4_1_1_1_1)
	{ after(grammarAccess.getXConstructorCallAccess().getArgumentsAssignment_4_1_1_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XBooleanLiteral__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XBooleanLiteral__Group__0__Impl
	rule__XBooleanLiteral__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XBooleanLiteral__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXBooleanLiteralAccess().getXBooleanLiteralAction_0()); }
	()
	{ after(grammarAccess.getXBooleanLiteralAccess().getXBooleanLiteralAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XBooleanLiteral__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XBooleanLiteral__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XBooleanLiteral__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXBooleanLiteralAccess().getAlternatives_1()); }
	(rule__XBooleanLiteral__Alternatives_1)
	{ after(grammarAccess.getXBooleanLiteralAccess().getAlternatives_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XNullLiteral__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XNullLiteral__Group__0__Impl
	rule__XNullLiteral__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XNullLiteral__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXNullLiteralAccess().getXNullLiteralAction_0()); }
	()
	{ after(grammarAccess.getXNullLiteralAccess().getXNullLiteralAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XNullLiteral__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XNullLiteral__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

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


rule__XNumberLiteral__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XNumberLiteral__Group__0__Impl
	rule__XNumberLiteral__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XNumberLiteral__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXNumberLiteralAccess().getXNumberLiteralAction_0()); }
	()
	{ after(grammarAccess.getXNumberLiteralAccess().getXNumberLiteralAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XNumberLiteral__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XNumberLiteral__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XNumberLiteral__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXNumberLiteralAccess().getValueAssignment_1()); }
	(rule__XNumberLiteral__ValueAssignment_1)
	{ after(grammarAccess.getXNumberLiteralAccess().getValueAssignment_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XStringLiteral__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XStringLiteral__Group__0__Impl
	rule__XStringLiteral__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XStringLiteral__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXStringLiteralAccess().getXStringLiteralAction_0()); }
	()
	{ after(grammarAccess.getXStringLiteralAccess().getXStringLiteralAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XStringLiteral__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XStringLiteral__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XStringLiteral__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXStringLiteralAccess().getValueAssignment_1()); }
	(rule__XStringLiteral__ValueAssignment_1)
	{ after(grammarAccess.getXStringLiteralAccess().getValueAssignment_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XTypeLiteral__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XTypeLiteral__Group__0__Impl
	rule__XTypeLiteral__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XTypeLiteral__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXTypeLiteralAccess().getXTypeLiteralAction_0()); }
	()
	{ after(grammarAccess.getXTypeLiteralAccess().getXTypeLiteralAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XTypeLiteral__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XTypeLiteral__Group__1__Impl
	rule__XTypeLiteral__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XTypeLiteral__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXTypeLiteralAccess().getTypeofKeyword_1()); }
	'typeof'
	{ after(grammarAccess.getXTypeLiteralAccess().getTypeofKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XTypeLiteral__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XTypeLiteral__Group__2__Impl
	rule__XTypeLiteral__Group__3
;
finally {
	restoreStackSize(stackSize);
}

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

rule__XTypeLiteral__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XTypeLiteral__Group__3__Impl
	rule__XTypeLiteral__Group__4
;
finally {
	restoreStackSize(stackSize);
}

rule__XTypeLiteral__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXTypeLiteralAccess().getTypeAssignment_3()); }
	(rule__XTypeLiteral__TypeAssignment_3)
	{ after(grammarAccess.getXTypeLiteralAccess().getTypeAssignment_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XTypeLiteral__Group__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XTypeLiteral__Group__4__Impl
	rule__XTypeLiteral__Group__5
;
finally {
	restoreStackSize(stackSize);
}

rule__XTypeLiteral__Group__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXTypeLiteralAccess().getArrayDimensionsAssignment_4()); }
	(rule__XTypeLiteral__ArrayDimensionsAssignment_4)*
	{ after(grammarAccess.getXTypeLiteralAccess().getArrayDimensionsAssignment_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XTypeLiteral__Group__5
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XTypeLiteral__Group__5__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XTypeLiteral__Group__5__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXTypeLiteralAccess().getRightParenthesisKeyword_5()); }
	')'
	{ after(grammarAccess.getXTypeLiteralAccess().getRightParenthesisKeyword_5()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XThrowExpression__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XThrowExpression__Group__0__Impl
	rule__XThrowExpression__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XThrowExpression__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXThrowExpressionAccess().getXThrowExpressionAction_0()); }
	()
	{ after(grammarAccess.getXThrowExpressionAccess().getXThrowExpressionAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XThrowExpression__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XThrowExpression__Group__1__Impl
	rule__XThrowExpression__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XThrowExpression__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXThrowExpressionAccess().getThrowKeyword_1()); }
	'throw'
	{ after(grammarAccess.getXThrowExpressionAccess().getThrowKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XThrowExpression__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XThrowExpression__Group__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XThrowExpression__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXThrowExpressionAccess().getExpressionAssignment_2()); }
	(rule__XThrowExpression__ExpressionAssignment_2)
	{ after(grammarAccess.getXThrowExpressionAccess().getExpressionAssignment_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XReturnExpression__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XReturnExpression__Group__0__Impl
	rule__XReturnExpression__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XReturnExpression__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXReturnExpressionAccess().getXReturnExpressionAction_0()); }
	()
	{ after(grammarAccess.getXReturnExpressionAccess().getXReturnExpressionAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XReturnExpression__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XReturnExpression__Group__1__Impl
	rule__XReturnExpression__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XReturnExpression__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXReturnExpressionAccess().getReturnKeyword_1()); }
	'return'
	{ after(grammarAccess.getXReturnExpressionAccess().getReturnKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XReturnExpression__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XReturnExpression__Group__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XReturnExpression__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXReturnExpressionAccess().getExpressionAssignment_2()); }
	(rule__XReturnExpression__ExpressionAssignment_2)?
	{ after(grammarAccess.getXReturnExpressionAccess().getExpressionAssignment_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XTryCatchFinallyExpression__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XTryCatchFinallyExpression__Group__0__Impl
	rule__XTryCatchFinallyExpression__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XTryCatchFinallyExpression__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXTryCatchFinallyExpressionAccess().getXTryCatchFinallyExpressionAction_0()); }
	()
	{ after(grammarAccess.getXTryCatchFinallyExpressionAccess().getXTryCatchFinallyExpressionAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XTryCatchFinallyExpression__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XTryCatchFinallyExpression__Group__1__Impl
	rule__XTryCatchFinallyExpression__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XTryCatchFinallyExpression__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXTryCatchFinallyExpressionAccess().getTryKeyword_1()); }
	'try'
	{ after(grammarAccess.getXTryCatchFinallyExpressionAccess().getTryKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XTryCatchFinallyExpression__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XTryCatchFinallyExpression__Group__2__Impl
	rule__XTryCatchFinallyExpression__Group__3
;
finally {
	restoreStackSize(stackSize);
}

rule__XTryCatchFinallyExpression__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXTryCatchFinallyExpressionAccess().getExpressionAssignment_2()); }
	(rule__XTryCatchFinallyExpression__ExpressionAssignment_2)
	{ after(grammarAccess.getXTryCatchFinallyExpressionAccess().getExpressionAssignment_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XTryCatchFinallyExpression__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XTryCatchFinallyExpression__Group__3__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XTryCatchFinallyExpression__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXTryCatchFinallyExpressionAccess().getAlternatives_3()); }
	(rule__XTryCatchFinallyExpression__Alternatives_3)
	{ after(grammarAccess.getXTryCatchFinallyExpressionAccess().getAlternatives_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XTryCatchFinallyExpression__Group_3_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XTryCatchFinallyExpression__Group_3_0__0__Impl
	rule__XTryCatchFinallyExpression__Group_3_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XTryCatchFinallyExpression__Group_3_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	(
		{ before(grammarAccess.getXTryCatchFinallyExpressionAccess().getCatchClausesAssignment_3_0_0()); }
		(rule__XTryCatchFinallyExpression__CatchClausesAssignment_3_0_0)
		{ after(grammarAccess.getXTryCatchFinallyExpressionAccess().getCatchClausesAssignment_3_0_0()); }
	)
	(
		{ before(grammarAccess.getXTryCatchFinallyExpressionAccess().getCatchClausesAssignment_3_0_0()); }
		(rule__XTryCatchFinallyExpression__CatchClausesAssignment_3_0_0)*
		{ after(grammarAccess.getXTryCatchFinallyExpressionAccess().getCatchClausesAssignment_3_0_0()); }
	)
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XTryCatchFinallyExpression__Group_3_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XTryCatchFinallyExpression__Group_3_0__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XTryCatchFinallyExpression__Group_3_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXTryCatchFinallyExpressionAccess().getGroup_3_0_1()); }
	(rule__XTryCatchFinallyExpression__Group_3_0_1__0)?
	{ after(grammarAccess.getXTryCatchFinallyExpressionAccess().getGroup_3_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XTryCatchFinallyExpression__Group_3_0_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XTryCatchFinallyExpression__Group_3_0_1__0__Impl
	rule__XTryCatchFinallyExpression__Group_3_0_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XTryCatchFinallyExpression__Group_3_0_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXTryCatchFinallyExpressionAccess().getFinallyKeyword_3_0_1_0()); }
	('finally')
	{ after(grammarAccess.getXTryCatchFinallyExpressionAccess().getFinallyKeyword_3_0_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XTryCatchFinallyExpression__Group_3_0_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XTryCatchFinallyExpression__Group_3_0_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XTryCatchFinallyExpression__Group_3_0_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXTryCatchFinallyExpressionAccess().getFinallyExpressionAssignment_3_0_1_1()); }
	(rule__XTryCatchFinallyExpression__FinallyExpressionAssignment_3_0_1_1)
	{ after(grammarAccess.getXTryCatchFinallyExpressionAccess().getFinallyExpressionAssignment_3_0_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XTryCatchFinallyExpression__Group_3_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XTryCatchFinallyExpression__Group_3_1__0__Impl
	rule__XTryCatchFinallyExpression__Group_3_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XTryCatchFinallyExpression__Group_3_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXTryCatchFinallyExpressionAccess().getFinallyKeyword_3_1_0()); }
	'finally'
	{ after(grammarAccess.getXTryCatchFinallyExpressionAccess().getFinallyKeyword_3_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XTryCatchFinallyExpression__Group_3_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XTryCatchFinallyExpression__Group_3_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XTryCatchFinallyExpression__Group_3_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXTryCatchFinallyExpressionAccess().getFinallyExpressionAssignment_3_1_1()); }
	(rule__XTryCatchFinallyExpression__FinallyExpressionAssignment_3_1_1)
	{ after(grammarAccess.getXTryCatchFinallyExpressionAccess().getFinallyExpressionAssignment_3_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XSynchronizedExpression__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSynchronizedExpression__Group__0__Impl
	rule__XSynchronizedExpression__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XSynchronizedExpression__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXSynchronizedExpressionAccess().getGroup_0()); }
	(rule__XSynchronizedExpression__Group_0__0)
	{ after(grammarAccess.getXSynchronizedExpressionAccess().getGroup_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XSynchronizedExpression__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSynchronizedExpression__Group__1__Impl
	rule__XSynchronizedExpression__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XSynchronizedExpression__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXSynchronizedExpressionAccess().getParamAssignment_1()); }
	(rule__XSynchronizedExpression__ParamAssignment_1)
	{ after(grammarAccess.getXSynchronizedExpressionAccess().getParamAssignment_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XSynchronizedExpression__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSynchronizedExpression__Group__2__Impl
	rule__XSynchronizedExpression__Group__3
;
finally {
	restoreStackSize(stackSize);
}

rule__XSynchronizedExpression__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXSynchronizedExpressionAccess().getRightParenthesisKeyword_2()); }
	')'
	{ after(grammarAccess.getXSynchronizedExpressionAccess().getRightParenthesisKeyword_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XSynchronizedExpression__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSynchronizedExpression__Group__3__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XSynchronizedExpression__Group__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXSynchronizedExpressionAccess().getExpressionAssignment_3()); }
	(rule__XSynchronizedExpression__ExpressionAssignment_3)
	{ after(grammarAccess.getXSynchronizedExpressionAccess().getExpressionAssignment_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XSynchronizedExpression__Group_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSynchronizedExpression__Group_0__0__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XSynchronizedExpression__Group_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXSynchronizedExpressionAccess().getGroup_0_0()); }
	(rule__XSynchronizedExpression__Group_0_0__0)
	{ after(grammarAccess.getXSynchronizedExpressionAccess().getGroup_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XSynchronizedExpression__Group_0_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSynchronizedExpression__Group_0_0__0__Impl
	rule__XSynchronizedExpression__Group_0_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XSynchronizedExpression__Group_0_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXSynchronizedExpressionAccess().getXSynchronizedExpressionAction_0_0_0()); }
	()
	{ after(grammarAccess.getXSynchronizedExpressionAccess().getXSynchronizedExpressionAction_0_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XSynchronizedExpression__Group_0_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSynchronizedExpression__Group_0_0__1__Impl
	rule__XSynchronizedExpression__Group_0_0__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XSynchronizedExpression__Group_0_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXSynchronizedExpressionAccess().getSynchronizedKeyword_0_0_1()); }
	'synchronized'
	{ after(grammarAccess.getXSynchronizedExpressionAccess().getSynchronizedKeyword_0_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XSynchronizedExpression__Group_0_0__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XSynchronizedExpression__Group_0_0__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XSynchronizedExpression__Group_0_0__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXSynchronizedExpressionAccess().getLeftParenthesisKeyword_0_0_2()); }
	'('
	{ after(grammarAccess.getXSynchronizedExpressionAccess().getLeftParenthesisKeyword_0_0_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XCatchClause__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XCatchClause__Group__0__Impl
	rule__XCatchClause__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XCatchClause__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXCatchClauseAccess().getCatchKeyword_0()); }
	('catch')
	{ after(grammarAccess.getXCatchClauseAccess().getCatchKeyword_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XCatchClause__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XCatchClause__Group__1__Impl
	rule__XCatchClause__Group__2
;
finally {
	restoreStackSize(stackSize);
}

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

rule__XCatchClause__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XCatchClause__Group__2__Impl
	rule__XCatchClause__Group__3
;
finally {
	restoreStackSize(stackSize);
}

rule__XCatchClause__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXCatchClauseAccess().getDeclaredParamAssignment_2()); }
	(rule__XCatchClause__DeclaredParamAssignment_2)
	{ after(grammarAccess.getXCatchClauseAccess().getDeclaredParamAssignment_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XCatchClause__Group__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XCatchClause__Group__3__Impl
	rule__XCatchClause__Group__4
;
finally {
	restoreStackSize(stackSize);
}

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

rule__XCatchClause__Group__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XCatchClause__Group__4__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XCatchClause__Group__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXCatchClauseAccess().getExpressionAssignment_4()); }
	(rule__XCatchClause__ExpressionAssignment_4)
	{ after(grammarAccess.getXCatchClauseAccess().getExpressionAssignment_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__QualifiedName__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__QualifiedName__Group__0__Impl
	rule__QualifiedName__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__QualifiedName__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getQualifiedNameAccess().getValidIDParserRuleCall_0()); }
	ruleValidID
	{ after(grammarAccess.getQualifiedNameAccess().getValidIDParserRuleCall_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__QualifiedName__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__QualifiedName__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__QualifiedName__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getQualifiedNameAccess().getGroup_1()); }
	(rule__QualifiedName__Group_1__0)*
	{ after(grammarAccess.getQualifiedNameAccess().getGroup_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__QualifiedName__Group_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__QualifiedName__Group_1__0__Impl
	rule__QualifiedName__Group_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__QualifiedName__Group_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getQualifiedNameAccess().getFullStopKeyword_1_0()); }
	('.')
	{ after(grammarAccess.getQualifiedNameAccess().getFullStopKeyword_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__QualifiedName__Group_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__QualifiedName__Group_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__QualifiedName__Group_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getQualifiedNameAccess().getValidIDParserRuleCall_1_1()); }
	ruleValidID
	{ after(grammarAccess.getQualifiedNameAccess().getValidIDParserRuleCall_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__Number__Group_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Number__Group_1__0__Impl
	rule__Number__Group_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__Number__Group_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getNumberAccess().getAlternatives_1_0()); }
	(rule__Number__Alternatives_1_0)
	{ after(grammarAccess.getNumberAccess().getAlternatives_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Number__Group_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Number__Group_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__Number__Group_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getNumberAccess().getGroup_1_1()); }
	(rule__Number__Group_1_1__0)?
	{ after(grammarAccess.getNumberAccess().getGroup_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__Number__Group_1_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Number__Group_1_1__0__Impl
	rule__Number__Group_1_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__Number__Group_1_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getNumberAccess().getFullStopKeyword_1_1_0()); }
	'.'
	{ after(grammarAccess.getNumberAccess().getFullStopKeyword_1_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__Number__Group_1_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Number__Group_1_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__Number__Group_1_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getNumberAccess().getAlternatives_1_1_1()); }
	(rule__Number__Alternatives_1_1_1)
	{ after(grammarAccess.getNumberAccess().getAlternatives_1_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__JvmTypeReference__Group_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmTypeReference__Group_0__0__Impl
	rule__JvmTypeReference__Group_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmTypeReference__Group_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmTypeReferenceAccess().getJvmParameterizedTypeReferenceParserRuleCall_0_0()); }
	ruleJvmParameterizedTypeReference
	{ after(grammarAccess.getJvmTypeReferenceAccess().getJvmParameterizedTypeReferenceParserRuleCall_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmTypeReference__Group_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmTypeReference__Group_0__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmTypeReference__Group_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmTypeReferenceAccess().getGroup_0_1()); }
	(rule__JvmTypeReference__Group_0_1__0)*
	{ after(grammarAccess.getJvmTypeReferenceAccess().getGroup_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__JvmTypeReference__Group_0_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmTypeReference__Group_0_1__0__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmTypeReference__Group_0_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmTypeReferenceAccess().getGroup_0_1_0()); }
	(rule__JvmTypeReference__Group_0_1_0__0)
	{ after(grammarAccess.getJvmTypeReferenceAccess().getGroup_0_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__JvmTypeReference__Group_0_1_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmTypeReference__Group_0_1_0__0__Impl
	rule__JvmTypeReference__Group_0_1_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmTypeReference__Group_0_1_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmTypeReferenceAccess().getJvmGenericArrayTypeReferenceComponentTypeAction_0_1_0_0()); }
	()
	{ after(grammarAccess.getJvmTypeReferenceAccess().getJvmGenericArrayTypeReferenceComponentTypeAction_0_1_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmTypeReference__Group_0_1_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmTypeReference__Group_0_1_0__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmTypeReference__Group_0_1_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmTypeReferenceAccess().getArrayBracketsParserRuleCall_0_1_0_1()); }
	ruleArrayBrackets
	{ after(grammarAccess.getJvmTypeReferenceAccess().getArrayBracketsParserRuleCall_0_1_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__ArrayBrackets__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__ArrayBrackets__Group__0__Impl
	rule__ArrayBrackets__Group__1
;
finally {
	restoreStackSize(stackSize);
}

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

rule__ArrayBrackets__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__ArrayBrackets__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__ArrayBrackets__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getArrayBracketsAccess().getRightSquareBracketKeyword_1()); }
	']'
	{ after(grammarAccess.getArrayBracketsAccess().getRightSquareBracketKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XFunctionTypeRef__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XFunctionTypeRef__Group__0__Impl
	rule__XFunctionTypeRef__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XFunctionTypeRef__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXFunctionTypeRefAccess().getGroup_0()); }
	(rule__XFunctionTypeRef__Group_0__0)?
	{ after(grammarAccess.getXFunctionTypeRefAccess().getGroup_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XFunctionTypeRef__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XFunctionTypeRef__Group__1__Impl
	rule__XFunctionTypeRef__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XFunctionTypeRef__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXFunctionTypeRefAccess().getEqualsSignGreaterThanSignKeyword_1()); }
	'=>'
	{ after(grammarAccess.getXFunctionTypeRefAccess().getEqualsSignGreaterThanSignKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XFunctionTypeRef__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XFunctionTypeRef__Group__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XFunctionTypeRef__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXFunctionTypeRefAccess().getReturnTypeAssignment_2()); }
	(rule__XFunctionTypeRef__ReturnTypeAssignment_2)
	{ after(grammarAccess.getXFunctionTypeRefAccess().getReturnTypeAssignment_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XFunctionTypeRef__Group_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XFunctionTypeRef__Group_0__0__Impl
	rule__XFunctionTypeRef__Group_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XFunctionTypeRef__Group_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXFunctionTypeRefAccess().getLeftParenthesisKeyword_0_0()); }
	'('
	{ after(grammarAccess.getXFunctionTypeRefAccess().getLeftParenthesisKeyword_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XFunctionTypeRef__Group_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XFunctionTypeRef__Group_0__1__Impl
	rule__XFunctionTypeRef__Group_0__2
;
finally {
	restoreStackSize(stackSize);
}

rule__XFunctionTypeRef__Group_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXFunctionTypeRefAccess().getGroup_0_1()); }
	(rule__XFunctionTypeRef__Group_0_1__0)?
	{ after(grammarAccess.getXFunctionTypeRefAccess().getGroup_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XFunctionTypeRef__Group_0__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XFunctionTypeRef__Group_0__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XFunctionTypeRef__Group_0__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXFunctionTypeRefAccess().getRightParenthesisKeyword_0_2()); }
	')'
	{ after(grammarAccess.getXFunctionTypeRefAccess().getRightParenthesisKeyword_0_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XFunctionTypeRef__Group_0_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XFunctionTypeRef__Group_0_1__0__Impl
	rule__XFunctionTypeRef__Group_0_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XFunctionTypeRef__Group_0_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXFunctionTypeRefAccess().getParamTypesAssignment_0_1_0()); }
	(rule__XFunctionTypeRef__ParamTypesAssignment_0_1_0)
	{ after(grammarAccess.getXFunctionTypeRefAccess().getParamTypesAssignment_0_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XFunctionTypeRef__Group_0_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XFunctionTypeRef__Group_0_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XFunctionTypeRef__Group_0_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXFunctionTypeRefAccess().getGroup_0_1_1()); }
	(rule__XFunctionTypeRef__Group_0_1_1__0)*
	{ after(grammarAccess.getXFunctionTypeRefAccess().getGroup_0_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__XFunctionTypeRef__Group_0_1_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XFunctionTypeRef__Group_0_1_1__0__Impl
	rule__XFunctionTypeRef__Group_0_1_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__XFunctionTypeRef__Group_0_1_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXFunctionTypeRefAccess().getCommaKeyword_0_1_1_0()); }
	','
	{ after(grammarAccess.getXFunctionTypeRefAccess().getCommaKeyword_0_1_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__XFunctionTypeRef__Group_0_1_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__XFunctionTypeRef__Group_0_1_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__XFunctionTypeRef__Group_0_1_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getXFunctionTypeRefAccess().getParamTypesAssignment_0_1_1_1()); }
	(rule__XFunctionTypeRef__ParamTypesAssignment_0_1_1_1)
	{ after(grammarAccess.getXFunctionTypeRefAccess().getParamTypesAssignment_0_1_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__JvmParameterizedTypeReference__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmParameterizedTypeReference__Group__0__Impl
	rule__JvmParameterizedTypeReference__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmParameterizedTypeReferenceAccess().getTypeAssignment_0()); }
	(rule__JvmParameterizedTypeReference__TypeAssignment_0)
	{ after(grammarAccess.getJvmParameterizedTypeReferenceAccess().getTypeAssignment_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmParameterizedTypeReference__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGroup_1()); }
	(rule__JvmParameterizedTypeReference__Group_1__0)?
	{ after(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGroup_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__JvmParameterizedTypeReference__Group_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmParameterizedTypeReference__Group_1__0__Impl
	rule__JvmParameterizedTypeReference__Group_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__Group_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmParameterizedTypeReferenceAccess().getLessThanSignKeyword_1_0()); }
	('<')
	{ after(grammarAccess.getJvmParameterizedTypeReferenceAccess().getLessThanSignKeyword_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__Group_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmParameterizedTypeReference__Group_1__1__Impl
	rule__JvmParameterizedTypeReference__Group_1__2
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__Group_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsAssignment_1_1()); }
	(rule__JvmParameterizedTypeReference__ArgumentsAssignment_1_1)
	{ after(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsAssignment_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__Group_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmParameterizedTypeReference__Group_1__2__Impl
	rule__JvmParameterizedTypeReference__Group_1__3
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__Group_1__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGroup_1_2()); }
	(rule__JvmParameterizedTypeReference__Group_1_2__0)*
	{ after(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGroup_1_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__Group_1__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmParameterizedTypeReference__Group_1__3__Impl
	rule__JvmParameterizedTypeReference__Group_1__4
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__Group_1__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGreaterThanSignKeyword_1_3()); }
	'>'
	{ after(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGreaterThanSignKeyword_1_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__Group_1__4
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmParameterizedTypeReference__Group_1__4__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__Group_1__4__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGroup_1_4()); }
	(rule__JvmParameterizedTypeReference__Group_1_4__0)*
	{ after(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGroup_1_4()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__JvmParameterizedTypeReference__Group_1_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmParameterizedTypeReference__Group_1_2__0__Impl
	rule__JvmParameterizedTypeReference__Group_1_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__Group_1_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmParameterizedTypeReferenceAccess().getCommaKeyword_1_2_0()); }
	','
	{ after(grammarAccess.getJvmParameterizedTypeReferenceAccess().getCommaKeyword_1_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__Group_1_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmParameterizedTypeReference__Group_1_2__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__Group_1_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsAssignment_1_2_1()); }
	(rule__JvmParameterizedTypeReference__ArgumentsAssignment_1_2_1)
	{ after(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsAssignment_1_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__JvmParameterizedTypeReference__Group_1_4__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmParameterizedTypeReference__Group_1_4__0__Impl
	rule__JvmParameterizedTypeReference__Group_1_4__1
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__Group_1_4__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGroup_1_4_0()); }
	(rule__JvmParameterizedTypeReference__Group_1_4_0__0)
	{ after(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGroup_1_4_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__Group_1_4__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmParameterizedTypeReference__Group_1_4__1__Impl
	rule__JvmParameterizedTypeReference__Group_1_4__2
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__Group_1_4__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmParameterizedTypeReferenceAccess().getTypeAssignment_1_4_1()); }
	(rule__JvmParameterizedTypeReference__TypeAssignment_1_4_1)
	{ after(grammarAccess.getJvmParameterizedTypeReferenceAccess().getTypeAssignment_1_4_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__Group_1_4__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmParameterizedTypeReference__Group_1_4__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__Group_1_4__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGroup_1_4_2()); }
	(rule__JvmParameterizedTypeReference__Group_1_4_2__0)?
	{ after(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGroup_1_4_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__JvmParameterizedTypeReference__Group_1_4_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmParameterizedTypeReference__Group_1_4_0__0__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__Group_1_4_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGroup_1_4_0_0()); }
	(rule__JvmParameterizedTypeReference__Group_1_4_0_0__0)
	{ after(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGroup_1_4_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__JvmParameterizedTypeReference__Group_1_4_0_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmParameterizedTypeReference__Group_1_4_0_0__0__Impl
	rule__JvmParameterizedTypeReference__Group_1_4_0_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__Group_1_4_0_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmParameterizedTypeReferenceAccess().getJvmInnerTypeReferenceOuterAction_1_4_0_0_0()); }
	()
	{ after(grammarAccess.getJvmParameterizedTypeReferenceAccess().getJvmInnerTypeReferenceOuterAction_1_4_0_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__Group_1_4_0_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmParameterizedTypeReference__Group_1_4_0_0__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__Group_1_4_0_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmParameterizedTypeReferenceAccess().getFullStopKeyword_1_4_0_0_1()); }
	'.'
	{ after(grammarAccess.getJvmParameterizedTypeReferenceAccess().getFullStopKeyword_1_4_0_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__JvmParameterizedTypeReference__Group_1_4_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmParameterizedTypeReference__Group_1_4_2__0__Impl
	rule__JvmParameterizedTypeReference__Group_1_4_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__Group_1_4_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmParameterizedTypeReferenceAccess().getLessThanSignKeyword_1_4_2_0()); }
	('<')
	{ after(grammarAccess.getJvmParameterizedTypeReferenceAccess().getLessThanSignKeyword_1_4_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__Group_1_4_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmParameterizedTypeReference__Group_1_4_2__1__Impl
	rule__JvmParameterizedTypeReference__Group_1_4_2__2
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__Group_1_4_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsAssignment_1_4_2_1()); }
	(rule__JvmParameterizedTypeReference__ArgumentsAssignment_1_4_2_1)
	{ after(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsAssignment_1_4_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__Group_1_4_2__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmParameterizedTypeReference__Group_1_4_2__2__Impl
	rule__JvmParameterizedTypeReference__Group_1_4_2__3
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__Group_1_4_2__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGroup_1_4_2_2()); }
	(rule__JvmParameterizedTypeReference__Group_1_4_2_2__0)*
	{ after(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGroup_1_4_2_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__Group_1_4_2__3
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmParameterizedTypeReference__Group_1_4_2__3__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__Group_1_4_2__3__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGreaterThanSignKeyword_1_4_2_3()); }
	'>'
	{ after(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGreaterThanSignKeyword_1_4_2_3()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__JvmParameterizedTypeReference__Group_1_4_2_2__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmParameterizedTypeReference__Group_1_4_2_2__0__Impl
	rule__JvmParameterizedTypeReference__Group_1_4_2_2__1
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__Group_1_4_2_2__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmParameterizedTypeReferenceAccess().getCommaKeyword_1_4_2_2_0()); }
	','
	{ after(grammarAccess.getJvmParameterizedTypeReferenceAccess().getCommaKeyword_1_4_2_2_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__Group_1_4_2_2__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmParameterizedTypeReference__Group_1_4_2_2__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__Group_1_4_2_2__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsAssignment_1_4_2_2_1()); }
	(rule__JvmParameterizedTypeReference__ArgumentsAssignment_1_4_2_2_1)
	{ after(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsAssignment_1_4_2_2_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__JvmWildcardTypeReference__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmWildcardTypeReference__Group__0__Impl
	rule__JvmWildcardTypeReference__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmWildcardTypeReference__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmWildcardTypeReferenceAccess().getJvmWildcardTypeReferenceAction_0()); }
	()
	{ after(grammarAccess.getJvmWildcardTypeReferenceAccess().getJvmWildcardTypeReferenceAction_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmWildcardTypeReference__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmWildcardTypeReference__Group__1__Impl
	rule__JvmWildcardTypeReference__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmWildcardTypeReference__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmWildcardTypeReferenceAccess().getQuestionMarkKeyword_1()); }
	'?'
	{ after(grammarAccess.getJvmWildcardTypeReferenceAccess().getQuestionMarkKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmWildcardTypeReference__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmWildcardTypeReference__Group__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmWildcardTypeReference__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmWildcardTypeReferenceAccess().getAlternatives_2()); }
	(rule__JvmWildcardTypeReference__Alternatives_2)?
	{ after(grammarAccess.getJvmWildcardTypeReferenceAccess().getAlternatives_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__JvmWildcardTypeReference__Group_2_0__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmWildcardTypeReference__Group_2_0__0__Impl
	rule__JvmWildcardTypeReference__Group_2_0__1
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmWildcardTypeReference__Group_2_0__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsAssignment_2_0_0()); }
	(rule__JvmWildcardTypeReference__ConstraintsAssignment_2_0_0)
	{ after(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsAssignment_2_0_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmWildcardTypeReference__Group_2_0__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmWildcardTypeReference__Group_2_0__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmWildcardTypeReference__Group_2_0__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsAssignment_2_0_1()); }
	(rule__JvmWildcardTypeReference__ConstraintsAssignment_2_0_1)*
	{ after(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsAssignment_2_0_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__JvmWildcardTypeReference__Group_2_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmWildcardTypeReference__Group_2_1__0__Impl
	rule__JvmWildcardTypeReference__Group_2_1__1
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmWildcardTypeReference__Group_2_1__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsAssignment_2_1_0()); }
	(rule__JvmWildcardTypeReference__ConstraintsAssignment_2_1_0)
	{ after(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsAssignment_2_1_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmWildcardTypeReference__Group_2_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmWildcardTypeReference__Group_2_1__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmWildcardTypeReference__Group_2_1__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsAssignment_2_1_1()); }
	(rule__JvmWildcardTypeReference__ConstraintsAssignment_2_1_1)*
	{ after(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsAssignment_2_1_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__JvmUpperBound__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmUpperBound__Group__0__Impl
	rule__JvmUpperBound__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmUpperBound__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmUpperBoundAccess().getExtendsKeyword_0()); }
	'extends'
	{ after(grammarAccess.getJvmUpperBoundAccess().getExtendsKeyword_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmUpperBound__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmUpperBound__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmUpperBound__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmUpperBoundAccess().getTypeReferenceAssignment_1()); }
	(rule__JvmUpperBound__TypeReferenceAssignment_1)
	{ after(grammarAccess.getJvmUpperBoundAccess().getTypeReferenceAssignment_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__JvmUpperBoundAnded__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmUpperBoundAnded__Group__0__Impl
	rule__JvmUpperBoundAnded__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmUpperBoundAnded__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmUpperBoundAndedAccess().getAmpersandKeyword_0()); }
	'&'
	{ after(grammarAccess.getJvmUpperBoundAndedAccess().getAmpersandKeyword_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmUpperBoundAnded__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmUpperBoundAnded__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmUpperBoundAnded__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmUpperBoundAndedAccess().getTypeReferenceAssignment_1()); }
	(rule__JvmUpperBoundAnded__TypeReferenceAssignment_1)
	{ after(grammarAccess.getJvmUpperBoundAndedAccess().getTypeReferenceAssignment_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__JvmLowerBound__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmLowerBound__Group__0__Impl
	rule__JvmLowerBound__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmLowerBound__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmLowerBoundAccess().getSuperKeyword_0()); }
	'super'
	{ after(grammarAccess.getJvmLowerBoundAccess().getSuperKeyword_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmLowerBound__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmLowerBound__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmLowerBound__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmLowerBoundAccess().getTypeReferenceAssignment_1()); }
	(rule__JvmLowerBound__TypeReferenceAssignment_1)
	{ after(grammarAccess.getJvmLowerBoundAccess().getTypeReferenceAssignment_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__JvmLowerBoundAnded__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmLowerBoundAnded__Group__0__Impl
	rule__JvmLowerBoundAnded__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmLowerBoundAnded__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmLowerBoundAndedAccess().getAmpersandKeyword_0()); }
	'&'
	{ after(grammarAccess.getJvmLowerBoundAndedAccess().getAmpersandKeyword_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmLowerBoundAnded__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__JvmLowerBoundAnded__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmLowerBoundAnded__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getJvmLowerBoundAndedAccess().getTypeReferenceAssignment_1()); }
	(rule__JvmLowerBoundAnded__TypeReferenceAssignment_1)
	{ after(grammarAccess.getJvmLowerBoundAndedAccess().getTypeReferenceAssignment_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__QualifiedNameWithWildcard__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__QualifiedNameWithWildcard__Group__0__Impl
	rule__QualifiedNameWithWildcard__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__QualifiedNameWithWildcard__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getQualifiedNameWithWildcardAccess().getQualifiedNameParserRuleCall_0()); }
	ruleQualifiedName
	{ after(grammarAccess.getQualifiedNameWithWildcardAccess().getQualifiedNameParserRuleCall_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__QualifiedNameWithWildcard__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__QualifiedNameWithWildcard__Group__1__Impl
	rule__QualifiedNameWithWildcard__Group__2
;
finally {
	restoreStackSize(stackSize);
}

rule__QualifiedNameWithWildcard__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getQualifiedNameWithWildcardAccess().getFullStopKeyword_1()); }
	'.'
	{ after(grammarAccess.getQualifiedNameWithWildcardAccess().getFullStopKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__QualifiedNameWithWildcard__Group__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__QualifiedNameWithWildcard__Group__2__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__QualifiedNameWithWildcard__Group__2__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getQualifiedNameWithWildcardAccess().getAsteriskKeyword_2()); }
	'*'
	{ after(grammarAccess.getQualifiedNameWithWildcardAccess().getAsteriskKeyword_2()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__QualifiedNameInStaticImport__Group__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__QualifiedNameInStaticImport__Group__0__Impl
	rule__QualifiedNameInStaticImport__Group__1
;
finally {
	restoreStackSize(stackSize);
}

rule__QualifiedNameInStaticImport__Group__0__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getQualifiedNameInStaticImportAccess().getValidIDParserRuleCall_0()); }
	ruleValidID
	{ after(grammarAccess.getQualifiedNameInStaticImportAccess().getValidIDParserRuleCall_0()); }
)
;
finally {
	restoreStackSize(stackSize);
}

rule__QualifiedNameInStaticImport__Group__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__QualifiedNameInStaticImport__Group__1__Impl
;
finally {
	restoreStackSize(stackSize);
}

rule__QualifiedNameInStaticImport__Group__1__Impl
	@init {
		int stackSize = keepStackSize();
	}
:
(
	{ before(grammarAccess.getQualifiedNameInStaticImportAccess().getFullStopKeyword_1()); }
	'.'
	{ after(grammarAccess.getQualifiedNameInStaticImportAccess().getFullStopKeyword_1()); }
)
;
finally {
	restoreStackSize(stackSize);
}


rule__Class__UnorderedGroup_2_0_1
	@init {
		int stackSize = keepStackSize();
		getUnorderedGroupHelper().enter(grammarAccess.getClassAccess().getUnorderedGroup_2_0_1());
	}
:
	rule__Class__UnorderedGroup_2_0_1__0
	?
;
finally {
	getUnorderedGroupHelper().leave(grammarAccess.getClassAccess().getUnorderedGroup_2_0_1());
	restoreStackSize(stackSize);
}

rule__Class__UnorderedGroup_2_0_1__Impl
	@init {
		int stackSize = keepStackSize();
		boolean selected = false;
	}
:
		(
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getClassAccess().getUnorderedGroup_2_0_1(), 0)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getClassAccess().getUnorderedGroup_2_0_1(), 0);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getClassAccess().getAbstractAssignment_2_0_1_0()); }
					(rule__Class__AbstractAssignment_2_0_1_0)
					{ after(grammarAccess.getClassAccess().getAbstractAssignment_2_0_1_0()); }
				)
			)
		)|
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getClassAccess().getUnorderedGroup_2_0_1(), 1)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getClassAccess().getUnorderedGroup_2_0_1(), 1);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getClassAccess().getAlternatives_2_0_1_1()); }
					(rule__Class__Alternatives_2_0_1_1)
					{ after(grammarAccess.getClassAccess().getAlternatives_2_0_1_1()); }
				)
			)
		)|
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getClassAccess().getUnorderedGroup_2_0_1(), 2)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getClassAccess().getUnorderedGroup_2_0_1(), 2);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getClassAccess().getCacheableAssignment_2_0_1_2()); }
					(rule__Class__CacheableAssignment_2_0_1_2)
					{ after(grammarAccess.getClassAccess().getCacheableAssignment_2_0_1_2()); }
				)
			)
		)
		)
;
finally {
	if (selected)
		getUnorderedGroupHelper().returnFromSelection(grammarAccess.getClassAccess().getUnorderedGroup_2_0_1());
	restoreStackSize(stackSize);
}

rule__Class__UnorderedGroup_2_0_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__UnorderedGroup_2_0_1__Impl
	rule__Class__UnorderedGroup_2_0_1__1?
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__UnorderedGroup_2_0_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__UnorderedGroup_2_0_1__Impl
	rule__Class__UnorderedGroup_2_0_1__2?
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__UnorderedGroup_2_0_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__Class__UnorderedGroup_2_0_1__Impl
;
finally {
	restoreStackSize(stackSize);
}


rule__EntityPersistenceInfo__UnorderedGroup_1
	@init {
		int stackSize = keepStackSize();
		getUnorderedGroupHelper().enter(grammarAccess.getEntityPersistenceInfoAccess().getUnorderedGroup_1());
	}
:
	rule__EntityPersistenceInfo__UnorderedGroup_1__0
	?
;
finally {
	getUnorderedGroupHelper().leave(grammarAccess.getEntityPersistenceInfoAccess().getUnorderedGroup_1());
	restoreStackSize(stackSize);
}

rule__EntityPersistenceInfo__UnorderedGroup_1__Impl
	@init {
		int stackSize = keepStackSize();
		boolean selected = false;
	}
:
		(
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getEntityPersistenceInfoAccess().getUnorderedGroup_1(), 0)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getEntityPersistenceInfoAccess().getUnorderedGroup_1(), 0);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getEntityPersistenceInfoAccess().getGroup_1_0()); }
					(rule__EntityPersistenceInfo__Group_1_0__0)
					{ after(grammarAccess.getEntityPersistenceInfoAccess().getGroup_1_0()); }
				)
			)
		)|
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getEntityPersistenceInfoAccess().getUnorderedGroup_1(), 1)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getEntityPersistenceInfoAccess().getUnorderedGroup_1(), 1);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getEntityPersistenceInfoAccess().getGroup_1_1()); }
					(rule__EntityPersistenceInfo__Group_1_1__0)
					{ after(grammarAccess.getEntityPersistenceInfoAccess().getGroup_1_1()); }
				)
			)
		)
		)
;
finally {
	if (selected)
		getUnorderedGroupHelper().returnFromSelection(grammarAccess.getEntityPersistenceInfoAccess().getUnorderedGroup_1());
	restoreStackSize(stackSize);
}

rule__EntityPersistenceInfo__UnorderedGroup_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityPersistenceInfo__UnorderedGroup_1__Impl
	rule__EntityPersistenceInfo__UnorderedGroup_1__1?
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityPersistenceInfo__UnorderedGroup_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EntityPersistenceInfo__UnorderedGroup_1__Impl
;
finally {
	restoreStackSize(stackSize);
}


rule__TablePerClassStrategy__UnorderedGroup_3
	@init {
		int stackSize = keepStackSize();
		getUnorderedGroupHelper().enter(grammarAccess.getTablePerClassStrategyAccess().getUnorderedGroup_3());
	}
:
	rule__TablePerClassStrategy__UnorderedGroup_3__0
	?
;
finally {
	getUnorderedGroupHelper().leave(grammarAccess.getTablePerClassStrategyAccess().getUnorderedGroup_3());
	restoreStackSize(stackSize);
}

rule__TablePerClassStrategy__UnorderedGroup_3__Impl
	@init {
		int stackSize = keepStackSize();
		boolean selected = false;
	}
:
		(
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getTablePerClassStrategyAccess().getUnorderedGroup_3(), 0)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getTablePerClassStrategyAccess().getUnorderedGroup_3(), 0);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getTablePerClassStrategyAccess().getGroup_3_0()); }
					(rule__TablePerClassStrategy__Group_3_0__0)
					{ after(grammarAccess.getTablePerClassStrategyAccess().getGroup_3_0()); }
				)
			)
		)|
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getTablePerClassStrategyAccess().getUnorderedGroup_3(), 1)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getTablePerClassStrategyAccess().getUnorderedGroup_3(), 1);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getTablePerClassStrategyAccess().getGroup_3_1()); }
					(rule__TablePerClassStrategy__Group_3_1__0)
					{ after(grammarAccess.getTablePerClassStrategyAccess().getGroup_3_1()); }
				)
			)
		)|
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getTablePerClassStrategyAccess().getUnorderedGroup_3(), 2)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getTablePerClassStrategyAccess().getUnorderedGroup_3(), 2);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getTablePerClassStrategyAccess().getGroup_3_2()); }
					(rule__TablePerClassStrategy__Group_3_2__0)
					{ after(grammarAccess.getTablePerClassStrategyAccess().getGroup_3_2()); }
				)
			)
		)
		)
;
finally {
	if (selected)
		getUnorderedGroupHelper().returnFromSelection(grammarAccess.getTablePerClassStrategyAccess().getUnorderedGroup_3());
	restoreStackSize(stackSize);
}

rule__TablePerClassStrategy__UnorderedGroup_3__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__TablePerClassStrategy__UnorderedGroup_3__Impl
	rule__TablePerClassStrategy__UnorderedGroup_3__1?
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerClassStrategy__UnorderedGroup_3__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__TablePerClassStrategy__UnorderedGroup_3__Impl
	rule__TablePerClassStrategy__UnorderedGroup_3__2?
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerClassStrategy__UnorderedGroup_3__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__TablePerClassStrategy__UnorderedGroup_3__Impl
;
finally {
	restoreStackSize(stackSize);
}


rule__TablePerSubclassStrategy__UnorderedGroup_3
	@init {
		int stackSize = keepStackSize();
		getUnorderedGroupHelper().enter(grammarAccess.getTablePerSubclassStrategyAccess().getUnorderedGroup_3());
	}
:
	rule__TablePerSubclassStrategy__UnorderedGroup_3__0
	?
;
finally {
	getUnorderedGroupHelper().leave(grammarAccess.getTablePerSubclassStrategyAccess().getUnorderedGroup_3());
	restoreStackSize(stackSize);
}

rule__TablePerSubclassStrategy__UnorderedGroup_3__Impl
	@init {
		int stackSize = keepStackSize();
		boolean selected = false;
	}
:
		(
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getTablePerSubclassStrategyAccess().getUnorderedGroup_3(), 0)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getTablePerSubclassStrategyAccess().getUnorderedGroup_3(), 0);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getTablePerSubclassStrategyAccess().getGroup_3_0()); }
					(rule__TablePerSubclassStrategy__Group_3_0__0)
					{ after(grammarAccess.getTablePerSubclassStrategyAccess().getGroup_3_0()); }
				)
			)
		)|
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getTablePerSubclassStrategyAccess().getUnorderedGroup_3(), 1)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getTablePerSubclassStrategyAccess().getUnorderedGroup_3(), 1);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getTablePerSubclassStrategyAccess().getGroup_3_1()); }
					(rule__TablePerSubclassStrategy__Group_3_1__0)
					{ after(grammarAccess.getTablePerSubclassStrategyAccess().getGroup_3_1()); }
				)
			)
		)|
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getTablePerSubclassStrategyAccess().getUnorderedGroup_3(), 2)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getTablePerSubclassStrategyAccess().getUnorderedGroup_3(), 2);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getTablePerSubclassStrategyAccess().getGroup_3_2()); }
					(rule__TablePerSubclassStrategy__Group_3_2__0)
					{ after(grammarAccess.getTablePerSubclassStrategyAccess().getGroup_3_2()); }
				)
			)
		)
		)
;
finally {
	if (selected)
		getUnorderedGroupHelper().returnFromSelection(grammarAccess.getTablePerSubclassStrategyAccess().getUnorderedGroup_3());
	restoreStackSize(stackSize);
}

rule__TablePerSubclassStrategy__UnorderedGroup_3__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__TablePerSubclassStrategy__UnorderedGroup_3__Impl
	rule__TablePerSubclassStrategy__UnorderedGroup_3__1?
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerSubclassStrategy__UnorderedGroup_3__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__TablePerSubclassStrategy__UnorderedGroup_3__Impl
	rule__TablePerSubclassStrategy__UnorderedGroup_3__2?
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerSubclassStrategy__UnorderedGroup_3__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__TablePerSubclassStrategy__UnorderedGroup_3__Impl
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCAssertFalse__UnorderedGroup_2_1
	@init {
		int stackSize = keepStackSize();
		getUnorderedGroupHelper().enter(grammarAccess.getDtCAssertFalseAccess().getUnorderedGroup_2_1());
	}
:
	rule__DtCAssertFalse__UnorderedGroup_2_1__0
	?
;
finally {
	getUnorderedGroupHelper().leave(grammarAccess.getDtCAssertFalseAccess().getUnorderedGroup_2_1());
	restoreStackSize(stackSize);
}

rule__DtCAssertFalse__UnorderedGroup_2_1__Impl
	@init {
		int stackSize = keepStackSize();
		boolean selected = false;
	}
:
		(
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCAssertFalseAccess().getUnorderedGroup_2_1(), 0)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCAssertFalseAccess().getUnorderedGroup_2_1(), 0);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCAssertFalseAccess().getGroup_2_1_0()); }
					(rule__DtCAssertFalse__Group_2_1_0__0)
					{ after(grammarAccess.getDtCAssertFalseAccess().getGroup_2_1_0()); }
				)
			)
		)|
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCAssertFalseAccess().getUnorderedGroup_2_1(), 1)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCAssertFalseAccess().getUnorderedGroup_2_1(), 1);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCAssertFalseAccess().getGroup_2_1_1()); }
					(rule__DtCAssertFalse__Group_2_1_1__0)
					{ after(grammarAccess.getDtCAssertFalseAccess().getGroup_2_1_1()); }
				)
			)
		)|
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCAssertFalseAccess().getUnorderedGroup_2_1(), 2)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCAssertFalseAccess().getUnorderedGroup_2_1(), 2);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCAssertFalseAccess().getGroup_2_1_2()); }
					(rule__DtCAssertFalse__Group_2_1_2__0)
					{ after(grammarAccess.getDtCAssertFalseAccess().getGroup_2_1_2()); }
				)
			)
		)
		)
;
finally {
	if (selected)
		getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtCAssertFalseAccess().getUnorderedGroup_2_1());
	restoreStackSize(stackSize);
}

rule__DtCAssertFalse__UnorderedGroup_2_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCAssertFalse__UnorderedGroup_2_1__Impl
	rule__DtCAssertFalse__UnorderedGroup_2_1__1?
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertFalse__UnorderedGroup_2_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCAssertFalse__UnorderedGroup_2_1__Impl
	rule__DtCAssertFalse__UnorderedGroup_2_1__2?
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertFalse__UnorderedGroup_2_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCAssertFalse__UnorderedGroup_2_1__Impl
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCAssertTrue__UnorderedGroup_2_1
	@init {
		int stackSize = keepStackSize();
		getUnorderedGroupHelper().enter(grammarAccess.getDtCAssertTrueAccess().getUnorderedGroup_2_1());
	}
:
	rule__DtCAssertTrue__UnorderedGroup_2_1__0
	?
;
finally {
	getUnorderedGroupHelper().leave(grammarAccess.getDtCAssertTrueAccess().getUnorderedGroup_2_1());
	restoreStackSize(stackSize);
}

rule__DtCAssertTrue__UnorderedGroup_2_1__Impl
	@init {
		int stackSize = keepStackSize();
		boolean selected = false;
	}
:
		(
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCAssertTrueAccess().getUnorderedGroup_2_1(), 0)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCAssertTrueAccess().getUnorderedGroup_2_1(), 0);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCAssertTrueAccess().getGroup_2_1_0()); }
					(rule__DtCAssertTrue__Group_2_1_0__0)
					{ after(grammarAccess.getDtCAssertTrueAccess().getGroup_2_1_0()); }
				)
			)
		)|
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCAssertTrueAccess().getUnorderedGroup_2_1(), 1)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCAssertTrueAccess().getUnorderedGroup_2_1(), 1);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCAssertTrueAccess().getGroup_2_1_1()); }
					(rule__DtCAssertTrue__Group_2_1_1__0)
					{ after(grammarAccess.getDtCAssertTrueAccess().getGroup_2_1_1()); }
				)
			)
		)|
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCAssertTrueAccess().getUnorderedGroup_2_1(), 2)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCAssertTrueAccess().getUnorderedGroup_2_1(), 2);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCAssertTrueAccess().getGroup_2_1_2()); }
					(rule__DtCAssertTrue__Group_2_1_2__0)
					{ after(grammarAccess.getDtCAssertTrueAccess().getGroup_2_1_2()); }
				)
			)
		)
		)
;
finally {
	if (selected)
		getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtCAssertTrueAccess().getUnorderedGroup_2_1());
	restoreStackSize(stackSize);
}

rule__DtCAssertTrue__UnorderedGroup_2_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCAssertTrue__UnorderedGroup_2_1__Impl
	rule__DtCAssertTrue__UnorderedGroup_2_1__1?
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertTrue__UnorderedGroup_2_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCAssertTrue__UnorderedGroup_2_1__Impl
	rule__DtCAssertTrue__UnorderedGroup_2_1__2?
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertTrue__UnorderedGroup_2_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCAssertTrue__UnorderedGroup_2_1__Impl
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCDecimalMax__UnorderedGroup_4_1
	@init {
		int stackSize = keepStackSize();
		getUnorderedGroupHelper().enter(grammarAccess.getDtCDecimalMaxAccess().getUnorderedGroup_4_1());
	}
:
	rule__DtCDecimalMax__UnorderedGroup_4_1__0
	?
;
finally {
	getUnorderedGroupHelper().leave(grammarAccess.getDtCDecimalMaxAccess().getUnorderedGroup_4_1());
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__UnorderedGroup_4_1__Impl
	@init {
		int stackSize = keepStackSize();
		boolean selected = false;
	}
:
		(
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCDecimalMaxAccess().getUnorderedGroup_4_1(), 0)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCDecimalMaxAccess().getUnorderedGroup_4_1(), 0);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCDecimalMaxAccess().getGroup_4_1_0()); }
					(rule__DtCDecimalMax__Group_4_1_0__0)
					{ after(grammarAccess.getDtCDecimalMaxAccess().getGroup_4_1_0()); }
				)
			)
		)|
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCDecimalMaxAccess().getUnorderedGroup_4_1(), 1)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCDecimalMaxAccess().getUnorderedGroup_4_1(), 1);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCDecimalMaxAccess().getGroup_4_1_1()); }
					(rule__DtCDecimalMax__Group_4_1_1__0)
					{ after(grammarAccess.getDtCDecimalMaxAccess().getGroup_4_1_1()); }
				)
			)
		)|
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCDecimalMaxAccess().getUnorderedGroup_4_1(), 2)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCDecimalMaxAccess().getUnorderedGroup_4_1(), 2);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCDecimalMaxAccess().getGroup_4_1_2()); }
					(rule__DtCDecimalMax__Group_4_1_2__0)
					{ after(grammarAccess.getDtCDecimalMaxAccess().getGroup_4_1_2()); }
				)
			)
		)
		)
;
finally {
	if (selected)
		getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtCDecimalMaxAccess().getUnorderedGroup_4_1());
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__UnorderedGroup_4_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMax__UnorderedGroup_4_1__Impl
	rule__DtCDecimalMax__UnorderedGroup_4_1__1?
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__UnorderedGroup_4_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMax__UnorderedGroup_4_1__Impl
	rule__DtCDecimalMax__UnorderedGroup_4_1__2?
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__UnorderedGroup_4_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMax__UnorderedGroup_4_1__Impl
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCDecimalMin__UnorderedGroup_4_1
	@init {
		int stackSize = keepStackSize();
		getUnorderedGroupHelper().enter(grammarAccess.getDtCDecimalMinAccess().getUnorderedGroup_4_1());
	}
:
	rule__DtCDecimalMin__UnorderedGroup_4_1__0
	?
;
finally {
	getUnorderedGroupHelper().leave(grammarAccess.getDtCDecimalMinAccess().getUnorderedGroup_4_1());
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__UnorderedGroup_4_1__Impl
	@init {
		int stackSize = keepStackSize();
		boolean selected = false;
	}
:
		(
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCDecimalMinAccess().getUnorderedGroup_4_1(), 0)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCDecimalMinAccess().getUnorderedGroup_4_1(), 0);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCDecimalMinAccess().getGroup_4_1_0()); }
					(rule__DtCDecimalMin__Group_4_1_0__0)
					{ after(grammarAccess.getDtCDecimalMinAccess().getGroup_4_1_0()); }
				)
			)
		)|
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCDecimalMinAccess().getUnorderedGroup_4_1(), 1)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCDecimalMinAccess().getUnorderedGroup_4_1(), 1);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCDecimalMinAccess().getGroup_4_1_1()); }
					(rule__DtCDecimalMin__Group_4_1_1__0)
					{ after(grammarAccess.getDtCDecimalMinAccess().getGroup_4_1_1()); }
				)
			)
		)|
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCDecimalMinAccess().getUnorderedGroup_4_1(), 2)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCDecimalMinAccess().getUnorderedGroup_4_1(), 2);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCDecimalMinAccess().getGroup_4_1_2()); }
					(rule__DtCDecimalMin__Group_4_1_2__0)
					{ after(grammarAccess.getDtCDecimalMinAccess().getGroup_4_1_2()); }
				)
			)
		)
		)
;
finally {
	if (selected)
		getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtCDecimalMinAccess().getUnorderedGroup_4_1());
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__UnorderedGroup_4_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMin__UnorderedGroup_4_1__Impl
	rule__DtCDecimalMin__UnorderedGroup_4_1__1?
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__UnorderedGroup_4_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMin__UnorderedGroup_4_1__Impl
	rule__DtCDecimalMin__UnorderedGroup_4_1__2?
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__UnorderedGroup_4_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDecimalMin__UnorderedGroup_4_1__Impl
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCDigits__UnorderedGroup_6_1
	@init {
		int stackSize = keepStackSize();
		getUnorderedGroupHelper().enter(grammarAccess.getDtCDigitsAccess().getUnorderedGroup_6_1());
	}
:
	rule__DtCDigits__UnorderedGroup_6_1__0
	?
;
finally {
	getUnorderedGroupHelper().leave(grammarAccess.getDtCDigitsAccess().getUnorderedGroup_6_1());
	restoreStackSize(stackSize);
}

rule__DtCDigits__UnorderedGroup_6_1__Impl
	@init {
		int stackSize = keepStackSize();
		boolean selected = false;
	}
:
		(
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCDigitsAccess().getUnorderedGroup_6_1(), 0)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCDigitsAccess().getUnorderedGroup_6_1(), 0);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCDigitsAccess().getGroup_6_1_0()); }
					(rule__DtCDigits__Group_6_1_0__0)
					{ after(grammarAccess.getDtCDigitsAccess().getGroup_6_1_0()); }
				)
			)
		)|
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCDigitsAccess().getUnorderedGroup_6_1(), 1)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCDigitsAccess().getUnorderedGroup_6_1(), 1);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCDigitsAccess().getGroup_6_1_1()); }
					(rule__DtCDigits__Group_6_1_1__0)
					{ after(grammarAccess.getDtCDigitsAccess().getGroup_6_1_1()); }
				)
			)
		)|
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCDigitsAccess().getUnorderedGroup_6_1(), 2)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCDigitsAccess().getUnorderedGroup_6_1(), 2);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCDigitsAccess().getGroup_6_1_2()); }
					(rule__DtCDigits__Group_6_1_2__0)
					{ after(grammarAccess.getDtCDigitsAccess().getGroup_6_1_2()); }
				)
			)
		)
		)
;
finally {
	if (selected)
		getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtCDigitsAccess().getUnorderedGroup_6_1());
	restoreStackSize(stackSize);
}

rule__DtCDigits__UnorderedGroup_6_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDigits__UnorderedGroup_6_1__Impl
	rule__DtCDigits__UnorderedGroup_6_1__1?
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__UnorderedGroup_6_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDigits__UnorderedGroup_6_1__Impl
	rule__DtCDigits__UnorderedGroup_6_1__2?
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__UnorderedGroup_6_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCDigits__UnorderedGroup_6_1__Impl
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCFuture__UnorderedGroup_2_1
	@init {
		int stackSize = keepStackSize();
		getUnorderedGroupHelper().enter(grammarAccess.getDtCFutureAccess().getUnorderedGroup_2_1());
	}
:
	rule__DtCFuture__UnorderedGroup_2_1__0
	?
;
finally {
	getUnorderedGroupHelper().leave(grammarAccess.getDtCFutureAccess().getUnorderedGroup_2_1());
	restoreStackSize(stackSize);
}

rule__DtCFuture__UnorderedGroup_2_1__Impl
	@init {
		int stackSize = keepStackSize();
		boolean selected = false;
	}
:
		(
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCFutureAccess().getUnorderedGroup_2_1(), 0)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCFutureAccess().getUnorderedGroup_2_1(), 0);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCFutureAccess().getGroup_2_1_0()); }
					(rule__DtCFuture__Group_2_1_0__0)
					{ after(grammarAccess.getDtCFutureAccess().getGroup_2_1_0()); }
				)
			)
		)|
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCFutureAccess().getUnorderedGroup_2_1(), 1)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCFutureAccess().getUnorderedGroup_2_1(), 1);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCFutureAccess().getGroup_2_1_1()); }
					(rule__DtCFuture__Group_2_1_1__0)
					{ after(grammarAccess.getDtCFutureAccess().getGroup_2_1_1()); }
				)
			)
		)|
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCFutureAccess().getUnorderedGroup_2_1(), 2)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCFutureAccess().getUnorderedGroup_2_1(), 2);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCFutureAccess().getGroup_2_1_2()); }
					(rule__DtCFuture__Group_2_1_2__0)
					{ after(grammarAccess.getDtCFutureAccess().getGroup_2_1_2()); }
				)
			)
		)
		)
;
finally {
	if (selected)
		getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtCFutureAccess().getUnorderedGroup_2_1());
	restoreStackSize(stackSize);
}

rule__DtCFuture__UnorderedGroup_2_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCFuture__UnorderedGroup_2_1__Impl
	rule__DtCFuture__UnorderedGroup_2_1__1?
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCFuture__UnorderedGroup_2_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCFuture__UnorderedGroup_2_1__Impl
	rule__DtCFuture__UnorderedGroup_2_1__2?
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCFuture__UnorderedGroup_2_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCFuture__UnorderedGroup_2_1__Impl
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCPast__UnorderedGroup_2_1
	@init {
		int stackSize = keepStackSize();
		getUnorderedGroupHelper().enter(grammarAccess.getDtCPastAccess().getUnorderedGroup_2_1());
	}
:
	rule__DtCPast__UnorderedGroup_2_1__0
	?
;
finally {
	getUnorderedGroupHelper().leave(grammarAccess.getDtCPastAccess().getUnorderedGroup_2_1());
	restoreStackSize(stackSize);
}

rule__DtCPast__UnorderedGroup_2_1__Impl
	@init {
		int stackSize = keepStackSize();
		boolean selected = false;
	}
:
		(
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCPastAccess().getUnorderedGroup_2_1(), 0)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCPastAccess().getUnorderedGroup_2_1(), 0);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCPastAccess().getGroup_2_1_0()); }
					(rule__DtCPast__Group_2_1_0__0)
					{ after(grammarAccess.getDtCPastAccess().getGroup_2_1_0()); }
				)
			)
		)|
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCPastAccess().getUnorderedGroup_2_1(), 1)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCPastAccess().getUnorderedGroup_2_1(), 1);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCPastAccess().getGroup_2_1_1()); }
					(rule__DtCPast__Group_2_1_1__0)
					{ after(grammarAccess.getDtCPastAccess().getGroup_2_1_1()); }
				)
			)
		)|
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCPastAccess().getUnorderedGroup_2_1(), 2)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCPastAccess().getUnorderedGroup_2_1(), 2);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCPastAccess().getGroup_2_1_2()); }
					(rule__DtCPast__Group_2_1_2__0)
					{ after(grammarAccess.getDtCPastAccess().getGroup_2_1_2()); }
				)
			)
		)
		)
;
finally {
	if (selected)
		getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtCPastAccess().getUnorderedGroup_2_1());
	restoreStackSize(stackSize);
}

rule__DtCPast__UnorderedGroup_2_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCPast__UnorderedGroup_2_1__Impl
	rule__DtCPast__UnorderedGroup_2_1__1?
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCPast__UnorderedGroup_2_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCPast__UnorderedGroup_2_1__Impl
	rule__DtCPast__UnorderedGroup_2_1__2?
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCPast__UnorderedGroup_2_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCPast__UnorderedGroup_2_1__Impl
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCNumericMax__UnorderedGroup_4_1
	@init {
		int stackSize = keepStackSize();
		getUnorderedGroupHelper().enter(grammarAccess.getDtCNumericMaxAccess().getUnorderedGroup_4_1());
	}
:
	rule__DtCNumericMax__UnorderedGroup_4_1__0
	?
;
finally {
	getUnorderedGroupHelper().leave(grammarAccess.getDtCNumericMaxAccess().getUnorderedGroup_4_1());
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__UnorderedGroup_4_1__Impl
	@init {
		int stackSize = keepStackSize();
		boolean selected = false;
	}
:
		(
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCNumericMaxAccess().getUnorderedGroup_4_1(), 0)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCNumericMaxAccess().getUnorderedGroup_4_1(), 0);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCNumericMaxAccess().getGroup_4_1_0()); }
					(rule__DtCNumericMax__Group_4_1_0__0)
					{ after(grammarAccess.getDtCNumericMaxAccess().getGroup_4_1_0()); }
				)
			)
		)|
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCNumericMaxAccess().getUnorderedGroup_4_1(), 1)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCNumericMaxAccess().getUnorderedGroup_4_1(), 1);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCNumericMaxAccess().getGroup_4_1_1()); }
					(rule__DtCNumericMax__Group_4_1_1__0)
					{ after(grammarAccess.getDtCNumericMaxAccess().getGroup_4_1_1()); }
				)
			)
		)|
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCNumericMaxAccess().getUnorderedGroup_4_1(), 2)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCNumericMaxAccess().getUnorderedGroup_4_1(), 2);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCNumericMaxAccess().getGroup_4_1_2()); }
					(rule__DtCNumericMax__Group_4_1_2__0)
					{ after(grammarAccess.getDtCNumericMaxAccess().getGroup_4_1_2()); }
				)
			)
		)
		)
;
finally {
	if (selected)
		getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtCNumericMaxAccess().getUnorderedGroup_4_1());
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__UnorderedGroup_4_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMax__UnorderedGroup_4_1__Impl
	rule__DtCNumericMax__UnorderedGroup_4_1__1?
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__UnorderedGroup_4_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMax__UnorderedGroup_4_1__Impl
	rule__DtCNumericMax__UnorderedGroup_4_1__2?
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__UnorderedGroup_4_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMax__UnorderedGroup_4_1__Impl
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCNumericMin__UnorderedGroup_4_1
	@init {
		int stackSize = keepStackSize();
		getUnorderedGroupHelper().enter(grammarAccess.getDtCNumericMinAccess().getUnorderedGroup_4_1());
	}
:
	rule__DtCNumericMin__UnorderedGroup_4_1__0
	?
;
finally {
	getUnorderedGroupHelper().leave(grammarAccess.getDtCNumericMinAccess().getUnorderedGroup_4_1());
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__UnorderedGroup_4_1__Impl
	@init {
		int stackSize = keepStackSize();
		boolean selected = false;
	}
:
		(
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCNumericMinAccess().getUnorderedGroup_4_1(), 0)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCNumericMinAccess().getUnorderedGroup_4_1(), 0);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCNumericMinAccess().getGroup_4_1_0()); }
					(rule__DtCNumericMin__Group_4_1_0__0)
					{ after(grammarAccess.getDtCNumericMinAccess().getGroup_4_1_0()); }
				)
			)
		)|
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCNumericMinAccess().getUnorderedGroup_4_1(), 1)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCNumericMinAccess().getUnorderedGroup_4_1(), 1);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCNumericMinAccess().getGroup_4_1_1()); }
					(rule__DtCNumericMin__Group_4_1_1__0)
					{ after(grammarAccess.getDtCNumericMinAccess().getGroup_4_1_1()); }
				)
			)
		)|
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCNumericMinAccess().getUnorderedGroup_4_1(), 2)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCNumericMinAccess().getUnorderedGroup_4_1(), 2);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCNumericMinAccess().getGroup_4_1_2()); }
					(rule__DtCNumericMin__Group_4_1_2__0)
					{ after(grammarAccess.getDtCNumericMinAccess().getGroup_4_1_2()); }
				)
			)
		)
		)
;
finally {
	if (selected)
		getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtCNumericMinAccess().getUnorderedGroup_4_1());
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__UnorderedGroup_4_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMin__UnorderedGroup_4_1__Impl
	rule__DtCNumericMin__UnorderedGroup_4_1__1?
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__UnorderedGroup_4_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMin__UnorderedGroup_4_1__Impl
	rule__DtCNumericMin__UnorderedGroup_4_1__2?
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__UnorderedGroup_4_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNumericMin__UnorderedGroup_4_1__Impl
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCNotNull__UnorderedGroup_2_1
	@init {
		int stackSize = keepStackSize();
		getUnorderedGroupHelper().enter(grammarAccess.getDtCNotNullAccess().getUnorderedGroup_2_1());
	}
:
	rule__DtCNotNull__UnorderedGroup_2_1__0
	?
;
finally {
	getUnorderedGroupHelper().leave(grammarAccess.getDtCNotNullAccess().getUnorderedGroup_2_1());
	restoreStackSize(stackSize);
}

rule__DtCNotNull__UnorderedGroup_2_1__Impl
	@init {
		int stackSize = keepStackSize();
		boolean selected = false;
	}
:
		(
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCNotNullAccess().getUnorderedGroup_2_1(), 0)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCNotNullAccess().getUnorderedGroup_2_1(), 0);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCNotNullAccess().getGroup_2_1_0()); }
					(rule__DtCNotNull__Group_2_1_0__0)
					{ after(grammarAccess.getDtCNotNullAccess().getGroup_2_1_0()); }
				)
			)
		)|
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCNotNullAccess().getUnorderedGroup_2_1(), 1)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCNotNullAccess().getUnorderedGroup_2_1(), 1);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCNotNullAccess().getGroup_2_1_1()); }
					(rule__DtCNotNull__Group_2_1_1__0)
					{ after(grammarAccess.getDtCNotNullAccess().getGroup_2_1_1()); }
				)
			)
		)|
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCNotNullAccess().getUnorderedGroup_2_1(), 2)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCNotNullAccess().getUnorderedGroup_2_1(), 2);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCNotNullAccess().getGroup_2_1_2()); }
					(rule__DtCNotNull__Group_2_1_2__0)
					{ after(grammarAccess.getDtCNotNullAccess().getGroup_2_1_2()); }
				)
			)
		)
		)
;
finally {
	if (selected)
		getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtCNotNullAccess().getUnorderedGroup_2_1());
	restoreStackSize(stackSize);
}

rule__DtCNotNull__UnorderedGroup_2_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNotNull__UnorderedGroup_2_1__Impl
	rule__DtCNotNull__UnorderedGroup_2_1__1?
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNotNull__UnorderedGroup_2_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNotNull__UnorderedGroup_2_1__Impl
	rule__DtCNotNull__UnorderedGroup_2_1__2?
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNotNull__UnorderedGroup_2_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNotNull__UnorderedGroup_2_1__Impl
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCNull__UnorderedGroup_2_1
	@init {
		int stackSize = keepStackSize();
		getUnorderedGroupHelper().enter(grammarAccess.getDtCNullAccess().getUnorderedGroup_2_1());
	}
:
	rule__DtCNull__UnorderedGroup_2_1__0
	?
;
finally {
	getUnorderedGroupHelper().leave(grammarAccess.getDtCNullAccess().getUnorderedGroup_2_1());
	restoreStackSize(stackSize);
}

rule__DtCNull__UnorderedGroup_2_1__Impl
	@init {
		int stackSize = keepStackSize();
		boolean selected = false;
	}
:
		(
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCNullAccess().getUnorderedGroup_2_1(), 0)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCNullAccess().getUnorderedGroup_2_1(), 0);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCNullAccess().getGroup_2_1_0()); }
					(rule__DtCNull__Group_2_1_0__0)
					{ after(grammarAccess.getDtCNullAccess().getGroup_2_1_0()); }
				)
			)
		)|
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCNullAccess().getUnorderedGroup_2_1(), 1)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCNullAccess().getUnorderedGroup_2_1(), 1);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCNullAccess().getGroup_2_1_1()); }
					(rule__DtCNull__Group_2_1_1__0)
					{ after(grammarAccess.getDtCNullAccess().getGroup_2_1_1()); }
				)
			)
		)|
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCNullAccess().getUnorderedGroup_2_1(), 2)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCNullAccess().getUnorderedGroup_2_1(), 2);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCNullAccess().getGroup_2_1_2()); }
					(rule__DtCNull__Group_2_1_2__0)
					{ after(grammarAccess.getDtCNullAccess().getGroup_2_1_2()); }
				)
			)
		)
		)
;
finally {
	if (selected)
		getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtCNullAccess().getUnorderedGroup_2_1());
	restoreStackSize(stackSize);
}

rule__DtCNull__UnorderedGroup_2_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNull__UnorderedGroup_2_1__Impl
	rule__DtCNull__UnorderedGroup_2_1__1?
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNull__UnorderedGroup_2_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNull__UnorderedGroup_2_1__Impl
	rule__DtCNull__UnorderedGroup_2_1__2?
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNull__UnorderedGroup_2_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCNull__UnorderedGroup_2_1__Impl
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCRegEx__UnorderedGroup_4_1
	@init {
		int stackSize = keepStackSize();
		getUnorderedGroupHelper().enter(grammarAccess.getDtCRegExAccess().getUnorderedGroup_4_1());
	}
:
	rule__DtCRegEx__UnorderedGroup_4_1__0
	?
;
finally {
	getUnorderedGroupHelper().leave(grammarAccess.getDtCRegExAccess().getUnorderedGroup_4_1());
	restoreStackSize(stackSize);
}

rule__DtCRegEx__UnorderedGroup_4_1__Impl
	@init {
		int stackSize = keepStackSize();
		boolean selected = false;
	}
:
		(
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCRegExAccess().getUnorderedGroup_4_1(), 0)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCRegExAccess().getUnorderedGroup_4_1(), 0);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCRegExAccess().getGroup_4_1_0()); }
					(rule__DtCRegEx__Group_4_1_0__0)
					{ after(grammarAccess.getDtCRegExAccess().getGroup_4_1_0()); }
				)
			)
		)|
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCRegExAccess().getUnorderedGroup_4_1(), 1)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCRegExAccess().getUnorderedGroup_4_1(), 1);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCRegExAccess().getGroup_4_1_1()); }
					(rule__DtCRegEx__Group_4_1_1__0)
					{ after(grammarAccess.getDtCRegExAccess().getGroup_4_1_1()); }
				)
			)
		)|
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCRegExAccess().getUnorderedGroup_4_1(), 2)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCRegExAccess().getUnorderedGroup_4_1(), 2);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCRegExAccess().getGroup_4_1_2()); }
					(rule__DtCRegEx__Group_4_1_2__0)
					{ after(grammarAccess.getDtCRegExAccess().getGroup_4_1_2()); }
				)
			)
		)
		)
;
finally {
	if (selected)
		getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtCRegExAccess().getUnorderedGroup_4_1());
	restoreStackSize(stackSize);
}

rule__DtCRegEx__UnorderedGroup_4_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCRegEx__UnorderedGroup_4_1__Impl
	rule__DtCRegEx__UnorderedGroup_4_1__1?
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCRegEx__UnorderedGroup_4_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCRegEx__UnorderedGroup_4_1__Impl
	rule__DtCRegEx__UnorderedGroup_4_1__2?
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCRegEx__UnorderedGroup_4_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCRegEx__UnorderedGroup_4_1__Impl
;
finally {
	restoreStackSize(stackSize);
}


rule__DtCSize__UnorderedGroup_6_1
	@init {
		int stackSize = keepStackSize();
		getUnorderedGroupHelper().enter(grammarAccess.getDtCSizeAccess().getUnorderedGroup_6_1());
	}
:
	rule__DtCSize__UnorderedGroup_6_1__0
	?
;
finally {
	getUnorderedGroupHelper().leave(grammarAccess.getDtCSizeAccess().getUnorderedGroup_6_1());
	restoreStackSize(stackSize);
}

rule__DtCSize__UnorderedGroup_6_1__Impl
	@init {
		int stackSize = keepStackSize();
		boolean selected = false;
	}
:
		(
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCSizeAccess().getUnorderedGroup_6_1(), 0)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCSizeAccess().getUnorderedGroup_6_1(), 0);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCSizeAccess().getGroup_6_1_0()); }
					(rule__DtCSize__Group_6_1_0__0)
					{ after(grammarAccess.getDtCSizeAccess().getGroup_6_1_0()); }
				)
			)
		)|
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCSizeAccess().getUnorderedGroup_6_1(), 1)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCSizeAccess().getUnorderedGroup_6_1(), 1);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCSizeAccess().getGroup_6_1_1()); }
					(rule__DtCSize__Group_6_1_1__0)
					{ after(grammarAccess.getDtCSizeAccess().getGroup_6_1_1()); }
				)
			)
		)|
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getDtCSizeAccess().getUnorderedGroup_6_1(), 2)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getDtCSizeAccess().getUnorderedGroup_6_1(), 2);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getDtCSizeAccess().getGroup_6_1_2()); }
					(rule__DtCSize__Group_6_1_2__0)
					{ after(grammarAccess.getDtCSizeAccess().getGroup_6_1_2()); }
				)
			)
		)
		)
;
finally {
	if (selected)
		getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDtCSizeAccess().getUnorderedGroup_6_1());
	restoreStackSize(stackSize);
}

rule__DtCSize__UnorderedGroup_6_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCSize__UnorderedGroup_6_1__Impl
	rule__DtCSize__UnorderedGroup_6_1__1?
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__UnorderedGroup_6_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCSize__UnorderedGroup_6_1__Impl
	rule__DtCSize__UnorderedGroup_6_1__2?
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__UnorderedGroup_6_1__2
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__DtCSize__UnorderedGroup_6_1__Impl
;
finally {
	restoreStackSize(stackSize);
}


rule__EnumLiteral__UnorderedGroup_1
	@init {
		int stackSize = keepStackSize();
		getUnorderedGroupHelper().enter(grammarAccess.getEnumLiteralAccess().getUnorderedGroup_1());
	}
:
	rule__EnumLiteral__UnorderedGroup_1__0
	{getUnorderedGroupHelper().canLeave(grammarAccess.getEnumLiteralAccess().getUnorderedGroup_1())}?
;
finally {
	getUnorderedGroupHelper().leave(grammarAccess.getEnumLiteralAccess().getUnorderedGroup_1());
	restoreStackSize(stackSize);
}

rule__EnumLiteral__UnorderedGroup_1__Impl
	@init {
		int stackSize = keepStackSize();
		boolean selected = false;
	}
:
		(
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getEnumLiteralAccess().getUnorderedGroup_1(), 0)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getEnumLiteralAccess().getUnorderedGroup_1(), 0);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getEnumLiteralAccess().getGroup_1_0()); }
					(rule__EnumLiteral__Group_1_0__0)
					{ after(grammarAccess.getEnumLiteralAccess().getGroup_1_0()); }
				)
			)
		)|
		( 
			{getUnorderedGroupHelper().canSelect(grammarAccess.getEnumLiteralAccess().getUnorderedGroup_1(), 1)}?=>(
				{
					getUnorderedGroupHelper().select(grammarAccess.getEnumLiteralAccess().getUnorderedGroup_1(), 1);
				}
				{
					selected = true;
				}
				(
					{ before(grammarAccess.getEnumLiteralAccess().getGroup_1_1()); }
					(rule__EnumLiteral__Group_1_1__0)
					{ after(grammarAccess.getEnumLiteralAccess().getGroup_1_1()); }
				)
			)
		)
		)
;
finally {
	if (selected)
		getUnorderedGroupHelper().returnFromSelection(grammarAccess.getEnumLiteralAccess().getUnorderedGroup_1());
	restoreStackSize(stackSize);
}

rule__EnumLiteral__UnorderedGroup_1__0
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EnumLiteral__UnorderedGroup_1__Impl
	rule__EnumLiteral__UnorderedGroup_1__1?
;
finally {
	restoreStackSize(stackSize);
}

rule__EnumLiteral__UnorderedGroup_1__1
	@init {
		int stackSize = keepStackSize();
	}
:
	rule__EnumLiteral__UnorderedGroup_1__Impl
;
finally {
	restoreStackSize(stackSize);
}


rule__EntityModel__ImportSectionAssignment_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityModelAccess().getImportSectionXImportSectionParserRuleCall_0_0()); }
		ruleXImportSection
		{ after(grammarAccess.getEntityModelAccess().getImportSectionXImportSectionParserRuleCall_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityModel__PackagesAssignment_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityModelAccess().getPackagesTypedPackageParserRuleCall_1_0()); }
		ruleTypedPackage
		{ after(grammarAccess.getEntityModelAccess().getPackagesTypedPackageParserRuleCall_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__AnnotationsAssignment_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getClassAccess().getAnnotationsAnnotationDefParserRuleCall_1_0()); }
		ruleAnnotationDef
		{ after(grammarAccess.getClassAccess().getAnnotationsAnnotationDefParserRuleCall_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__AbstractAssignment_2_0_1_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getClassAccess().getAbstractAbstractKeyword_2_0_1_0_0()); }
		(
			{ before(grammarAccess.getClassAccess().getAbstractAbstractKeyword_2_0_1_0_0()); }
			'abstract'
			{ after(grammarAccess.getClassAccess().getAbstractAbstractKeyword_2_0_1_0_0()); }
		)
		{ after(grammarAccess.getClassAccess().getAbstractAbstractKeyword_2_0_1_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__HistorizedAssignment_2_0_1_1_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getClassAccess().getHistorizedHistorizedKeyword_2_0_1_1_0_0()); }
		(
			{ before(grammarAccess.getClassAccess().getHistorizedHistorizedKeyword_2_0_1_1_0_0()); }
			'historized'
			{ after(grammarAccess.getClassAccess().getHistorizedHistorizedKeyword_2_0_1_1_0_0()); }
		)
		{ after(grammarAccess.getClassAccess().getHistorizedHistorizedKeyword_2_0_1_1_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__TimedependentAssignment_2_0_1_1_1_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getClassAccess().getTimedependentTimedependentKeyword_2_0_1_1_1_0_0()); }
		(
			{ before(grammarAccess.getClassAccess().getTimedependentTimedependentKeyword_2_0_1_1_1_0_0()); }
			'timedependent'
			{ after(grammarAccess.getClassAccess().getTimedependentTimedependentKeyword_2_0_1_1_1_0_0()); }
		)
		{ after(grammarAccess.getClassAccess().getTimedependentTimedependentKeyword_2_0_1_1_1_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__TimedependentDateTypeAssignment_2_0_1_1_1_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getClassAccess().getTimedependentDateTypeLHistorizedDateTypeEnumRuleCall_2_0_1_1_1_1_1_0()); }
		ruleLHistorizedDateType
		{ after(grammarAccess.getClassAccess().getTimedependentDateTypeLHistorizedDateTypeEnumRuleCall_2_0_1_1_1_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__CacheableAssignment_2_0_1_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getClassAccess().getCacheableCacheableKeyword_2_0_1_2_0()); }
		(
			{ before(grammarAccess.getClassAccess().getCacheableCacheableKeyword_2_0_1_2_0()); }
			'cacheable'
			{ after(grammarAccess.getClassAccess().getCacheableCacheableKeyword_2_0_1_2_0()); }
		)
		{ after(grammarAccess.getClassAccess().getCacheableCacheableKeyword_2_0_1_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__NameAssignment_2_0_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getClassAccess().getNameTRANSLATABLEIDParserRuleCall_2_0_3_0()); }
		ruleTRANSLATABLEID
		{ after(grammarAccess.getClassAccess().getNameTRANSLATABLEIDParserRuleCall_2_0_3_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__SuperTypeAssignment_2_0_4_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getClassAccess().getSuperTypeLEntityCrossReference_2_0_4_1_0()); }
		(
			{ before(grammarAccess.getClassAccess().getSuperTypeLEntityTYPE_CROSS_REFERENCEParserRuleCall_2_0_4_1_0_1()); }
			ruleTYPE_CROSS_REFERENCE
			{ after(grammarAccess.getClassAccess().getSuperTypeLEntityTYPE_CROSS_REFERENCEParserRuleCall_2_0_4_1_0_1()); }
		)
		{ after(grammarAccess.getClassAccess().getSuperTypeLEntityCrossReference_2_0_4_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__PersistenceInfoAssignment_2_0_6
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getClassAccess().getPersistenceInfoEntityPersistenceInfoParserRuleCall_2_0_6_0()); }
		ruleEntityPersistenceInfo
		{ after(grammarAccess.getClassAccess().getPersistenceInfoEntityPersistenceInfoParserRuleCall_2_0_6_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__InheritanceStrategyAssignment_2_0_7
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getClassAccess().getInheritanceStrategyEntityInheritanceStrategyParserRuleCall_2_0_7_0()); }
		ruleEntityInheritanceStrategy
		{ after(grammarAccess.getClassAccess().getInheritanceStrategyEntityInheritanceStrategyParserRuleCall_2_0_7_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__PersistenceUnitAssignment_2_0_8_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getClassAccess().getPersistenceUnitSTRINGTerminalRuleCall_2_0_8_1_0()); }
		RULE_STRING
		{ after(grammarAccess.getClassAccess().getPersistenceUnitSTRINGTerminalRuleCall_2_0_8_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__FeaturesAssignment_2_0_9
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getClassAccess().getFeaturesEntityFeatureParserRuleCall_2_0_9_0()); }
		ruleEntityFeature
		{ after(grammarAccess.getClassAccess().getFeaturesEntityFeatureParserRuleCall_2_0_9_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__IndexesAssignment_2_0_10_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getClassAccess().getIndexesIndexParserRuleCall_2_0_10_0_0()); }
		ruleIndex
		{ after(grammarAccess.getClassAccess().getIndexesIndexParserRuleCall_2_0_10_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__SuperIndexAssignment_2_0_10_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getClassAccess().getSuperIndexEntitySuperIndexParserRuleCall_2_0_10_1_0()); }
		ruleEntitySuperIndex
		{ after(grammarAccess.getClassAccess().getSuperIndexEntitySuperIndexParserRuleCall_2_0_10_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__MappedSuperclassAssignment_2_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getClassAccess().getMappedSuperclassMappedSuperclassKeyword_2_1_1_0()); }
		(
			{ before(grammarAccess.getClassAccess().getMappedSuperclassMappedSuperclassKeyword_2_1_1_0()); }
			'mappedSuperclass'
			{ after(grammarAccess.getClassAccess().getMappedSuperclassMappedSuperclassKeyword_2_1_1_0()); }
		)
		{ after(grammarAccess.getClassAccess().getMappedSuperclassMappedSuperclassKeyword_2_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__SuperTypeAssignment_2_1_2_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getClassAccess().getSuperTypeLEntityCrossReference_2_1_2_1_0()); }
		(
			{ before(grammarAccess.getClassAccess().getSuperTypeLEntityTYPE_CROSS_REFERENCEParserRuleCall_2_1_2_1_0_1()); }
			ruleTYPE_CROSS_REFERENCE
			{ after(grammarAccess.getClassAccess().getSuperTypeLEntityTYPE_CROSS_REFERENCEParserRuleCall_2_1_2_1_0_1()); }
		)
		{ after(grammarAccess.getClassAccess().getSuperTypeLEntityCrossReference_2_1_2_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__NameAssignment_2_1_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getClassAccess().getNameValidIDWithKeywordsParserRuleCall_2_1_3_0()); }
		ruleValidIDWithKeywords
		{ after(grammarAccess.getClassAccess().getNameValidIDWithKeywordsParserRuleCall_2_1_3_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__PersistenceUnitAssignment_2_1_5_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getClassAccess().getPersistenceUnitSTRINGTerminalRuleCall_2_1_5_1_0()); }
		RULE_STRING
		{ after(grammarAccess.getClassAccess().getPersistenceUnitSTRINGTerminalRuleCall_2_1_5_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__FeaturesAssignment_2_1_6
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getClassAccess().getFeaturesEntityFeatureParserRuleCall_2_1_6_0()); }
		ruleEntityFeature
		{ after(grammarAccess.getClassAccess().getFeaturesEntityFeatureParserRuleCall_2_1_6_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__NameAssignment_2_2_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getClassAccess().getNameTRANSLATABLEIDParserRuleCall_2_2_2_0()); }
		ruleTRANSLATABLEID
		{ after(grammarAccess.getClassAccess().getNameTRANSLATABLEIDParserRuleCall_2_2_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__SuperTypeAssignment_2_2_3_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getClassAccess().getSuperTypeLBeanCrossReference_2_2_3_1_0()); }
		(
			{ before(grammarAccess.getClassAccess().getSuperTypeLBeanTYPE_CROSS_REFERENCEParserRuleCall_2_2_3_1_0_1()); }
			ruleTYPE_CROSS_REFERENCE
			{ after(grammarAccess.getClassAccess().getSuperTypeLBeanTYPE_CROSS_REFERENCEParserRuleCall_2_2_3_1_0_1()); }
		)
		{ after(grammarAccess.getClassAccess().getSuperTypeLBeanCrossReference_2_2_3_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__Class__FeaturesAssignment_2_2_5
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getClassAccess().getFeaturesBeanFeatureParserRuleCall_2_2_5_0()); }
		ruleBeanFeature
		{ after(grammarAccess.getClassAccess().getFeaturesBeanFeatureParserRuleCall_2_2_5_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__Index__UniqueAssignment_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getIndexAccess().getUniqueUniqueKeyword_0_0()); }
		(
			{ before(grammarAccess.getIndexAccess().getUniqueUniqueKeyword_0_0()); }
			'unique'
			{ after(grammarAccess.getIndexAccess().getUniqueUniqueKeyword_0_0()); }
		)
		{ after(grammarAccess.getIndexAccess().getUniqueUniqueKeyword_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__Index__NameAssignment_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getIndexAccess().getNameIDTerminalRuleCall_2_0()); }
		RULE_ID
		{ after(grammarAccess.getIndexAccess().getNameIDTerminalRuleCall_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__Index__FeaturesAssignment_4
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getIndexAccess().getFeaturesLEntityFeatureCrossReference_4_0()); }
		(
			{ before(grammarAccess.getIndexAccess().getFeaturesLEntityFeatureIDTerminalRuleCall_4_0_1()); }
			RULE_ID
			{ after(grammarAccess.getIndexAccess().getFeaturesLEntityFeatureIDTerminalRuleCall_4_0_1()); }
		)
		{ after(grammarAccess.getIndexAccess().getFeaturesLEntityFeatureCrossReference_4_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__Index__FeaturesAssignment_5_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getIndexAccess().getFeaturesLEntityFeatureCrossReference_5_1_0()); }
		(
			{ before(grammarAccess.getIndexAccess().getFeaturesLEntityFeatureIDTerminalRuleCall_5_1_0_1()); }
			RULE_ID
			{ after(grammarAccess.getIndexAccess().getFeaturesLEntityFeatureIDTerminalRuleCall_5_1_0_1()); }
		)
		{ after(grammarAccess.getIndexAccess().getFeaturesLEntityFeatureCrossReference_5_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityPersistenceInfo__SchemaNameAssignment_1_0_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityPersistenceInfoAccess().getSchemaNameValidIDWithKeywordsParserRuleCall_1_0_1_0()); }
		ruleValidIDWithKeywords
		{ after(grammarAccess.getEntityPersistenceInfoAccess().getSchemaNameValidIDWithKeywordsParserRuleCall_1_0_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityPersistenceInfo__TableNameAssignment_1_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityPersistenceInfoAccess().getTableNameValidIDWithKeywordsParserRuleCall_1_1_1_0()); }
		ruleValidIDWithKeywords
		{ after(grammarAccess.getEntityPersistenceInfoAccess().getTableNameValidIDWithKeywordsParserRuleCall_1_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__ColumnPersistenceInfo__ColumnNameAssignment_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getColumnPersistenceInfoAccess().getColumnNameValidIDWithKeywordsParserRuleCall_2_0()); }
		ruleValidIDWithKeywords
		{ after(grammarAccess.getColumnPersistenceInfoAccess().getColumnNameValidIDWithKeywordsParserRuleCall_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__AnnotationsAssignment_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getAnnotationsAnnotationDefParserRuleCall_1_0()); }
		ruleAnnotationDef
		{ after(grammarAccess.getEntityFeatureAccess().getAnnotationsAnnotationDefParserRuleCall_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__CascadingAssignment_2_0_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getCascadingCascadeKeyword_2_0_1_1_0()); }
		(
			{ before(grammarAccess.getEntityFeatureAccess().getCascadingCascadeKeyword_2_0_1_1_0()); }
			'cascade'
			{ after(grammarAccess.getEntityFeatureAccess().getCascadingCascadeKeyword_2_0_1_1_0()); }
		)
		{ after(grammarAccess.getEntityFeatureAccess().getCascadingCascadeKeyword_2_0_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__FilterDepthAssignment_2_0_1_2_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getFilterDepthINTTerminalRuleCall_2_0_1_2_1_0()); }
		RULE_INT
		{ after(grammarAccess.getEntityFeatureAccess().getFilterDepthINTTerminalRuleCall_2_0_1_2_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__TypeAssignment_2_0_1_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getTypeLEntityCrossReference_2_0_1_3_0()); }
		(
			{ before(grammarAccess.getEntityFeatureAccess().getTypeLEntityTYPE_CROSS_REFERENCEParserRuleCall_2_0_1_3_0_1()); }
			ruleTYPE_CROSS_REFERENCE
			{ after(grammarAccess.getEntityFeatureAccess().getTypeLEntityTYPE_CROSS_REFERENCEParserRuleCall_2_0_1_3_0_1()); }
		)
		{ after(grammarAccess.getEntityFeatureAccess().getTypeLEntityCrossReference_2_0_1_3_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__MultiplicityAssignment_2_0_1_4
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getMultiplicityMultiplicityParserRuleCall_2_0_1_4_0()); }
		ruleMultiplicity
		{ after(grammarAccess.getEntityFeatureAccess().getMultiplicityMultiplicityParserRuleCall_2_0_1_4_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__ConstraintsAssignment_2_0_1_5_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getConstraintsAllConstraintsParserRuleCall_2_0_1_5_1_0()); }
		ruleAllConstraints
		{ after(grammarAccess.getEntityFeatureAccess().getConstraintsAllConstraintsParserRuleCall_2_0_1_5_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__NameAssignment_2_0_1_6
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getNameTRANSLATABLEIDParserRuleCall_2_0_1_6_0()); }
		ruleTRANSLATABLEID
		{ after(grammarAccess.getEntityFeatureAccess().getNameTRANSLATABLEIDParserRuleCall_2_0_1_6_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__PersistenceInfoAssignment_2_0_1_7
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getPersistenceInfoColumnPersistenceInfoParserRuleCall_2_0_1_7_0()); }
		ruleColumnPersistenceInfo
		{ after(grammarAccess.getEntityFeatureAccess().getPersistenceInfoColumnPersistenceInfoParserRuleCall_2_0_1_7_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__OppositeAssignment_2_0_1_8_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getOppositeLEntityReferenceCrossReference_2_0_1_8_1_0()); }
		(
			{ before(grammarAccess.getEntityFeatureAccess().getOppositeLEntityReferenceLFQNParserRuleCall_2_0_1_8_1_0_1()); }
			ruleLFQN
			{ after(grammarAccess.getEntityFeatureAccess().getOppositeLEntityReferenceLFQNParserRuleCall_2_0_1_8_1_0_1()); }
		)
		{ after(grammarAccess.getEntityFeatureAccess().getOppositeLEntityReferenceCrossReference_2_0_1_8_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__PropertiesAssignment_2_0_1_9_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getPropertiesKeyAndValueParserRuleCall_2_0_1_9_2_0()); }
		ruleKeyAndValue
		{ after(grammarAccess.getEntityFeatureAccess().getPropertiesKeyAndValueParserRuleCall_2_0_1_9_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__PropertiesAssignment_2_0_1_9_3_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getPropertiesKeyAndValueParserRuleCall_2_0_1_9_3_1_0()); }
		ruleKeyAndValue
		{ after(grammarAccess.getEntityFeatureAccess().getPropertiesKeyAndValueParserRuleCall_2_0_1_9_3_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__ResultFiltersAssignment_2_0_1_10
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getResultFiltersResultFiltersParserRuleCall_2_0_1_10_0()); }
		ruleResultFilters
		{ after(grammarAccess.getEntityFeatureAccess().getResultFiltersResultFiltersParserRuleCall_2_0_1_10_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__TransientAssignment_2_1_1_0_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getTransientTransientKeyword_2_1_1_0_0_0()); }
		(
			{ before(grammarAccess.getEntityFeatureAccess().getTransientTransientKeyword_2_1_1_0_0_0()); }
			'transient'
			{ after(grammarAccess.getEntityFeatureAccess().getTransientTransientKeyword_2_1_1_0_0_0()); }
		)
		{ after(grammarAccess.getEntityFeatureAccess().getTransientTransientKeyword_2_1_1_0_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__TypeAssignment_2_1_1_0_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getTypeLScalarTypeCrossReference_2_1_1_0_1_0()); }
		(
			{ before(grammarAccess.getEntityFeatureAccess().getTypeLScalarTypeTYPE_CROSS_REFERENCEParserRuleCall_2_1_1_0_1_0_1()); }
			ruleTYPE_CROSS_REFERENCE
			{ after(grammarAccess.getEntityFeatureAccess().getTypeLScalarTypeTYPE_CROSS_REFERENCEParserRuleCall_2_1_1_0_1_0_1()); }
		)
		{ after(grammarAccess.getEntityFeatureAccess().getTypeLScalarTypeCrossReference_2_1_1_0_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__ConstraintsAssignment_2_1_1_0_2_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getConstraintsAllConstraintsParserRuleCall_2_1_1_0_2_1_0()); }
		ruleAllConstraints
		{ after(grammarAccess.getEntityFeatureAccess().getConstraintsAllConstraintsParserRuleCall_2_1_1_0_2_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__NameAssignment_2_1_1_0_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getNameTRANSLATABLEIDParserRuleCall_2_1_1_0_3_0()); }
		ruleTRANSLATABLEID
		{ after(grammarAccess.getEntityFeatureAccess().getNameTRANSLATABLEIDParserRuleCall_2_1_1_0_3_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__PropertiesAssignment_2_1_1_0_4_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getPropertiesKeyAndValueParserRuleCall_2_1_1_0_4_2_0()); }
		ruleKeyAndValue
		{ after(grammarAccess.getEntityFeatureAccess().getPropertiesKeyAndValueParserRuleCall_2_1_1_0_4_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__PropertiesAssignment_2_1_1_0_4_3_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getPropertiesKeyAndValueParserRuleCall_2_1_1_0_4_3_1_0()); }
		ruleKeyAndValue
		{ after(grammarAccess.getEntityFeatureAccess().getPropertiesKeyAndValueParserRuleCall_2_1_1_0_4_3_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__DerivedAssignment_2_1_1_1_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getDerivedDerivedKeyword_2_1_1_1_0_0()); }
		(
			{ before(grammarAccess.getEntityFeatureAccess().getDerivedDerivedKeyword_2_1_1_1_0_0()); }
			'derived'
			{ after(grammarAccess.getEntityFeatureAccess().getDerivedDerivedKeyword_2_1_1_1_0_0()); }
		)
		{ after(grammarAccess.getEntityFeatureAccess().getDerivedDerivedKeyword_2_1_1_1_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__DomainDescriptionAssignment_2_1_1_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getDomainDescriptionDomainDescriptionKeyword_2_1_1_1_1_0()); }
		(
			{ before(grammarAccess.getEntityFeatureAccess().getDomainDescriptionDomainDescriptionKeyword_2_1_1_1_1_0()); }
			'domainDescription'
			{ after(grammarAccess.getEntityFeatureAccess().getDomainDescriptionDomainDescriptionKeyword_2_1_1_1_1_0()); }
		)
		{ after(grammarAccess.getEntityFeatureAccess().getDomainDescriptionDomainDescriptionKeyword_2_1_1_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__TypeAssignment_2_1_1_1_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getTypeLScalarTypeCrossReference_2_1_1_1_2_0()); }
		(
			{ before(grammarAccess.getEntityFeatureAccess().getTypeLScalarTypeTYPE_CROSS_REFERENCEParserRuleCall_2_1_1_1_2_0_1()); }
			ruleTYPE_CROSS_REFERENCE
			{ after(grammarAccess.getEntityFeatureAccess().getTypeLScalarTypeTYPE_CROSS_REFERENCEParserRuleCall_2_1_1_1_2_0_1()); }
		)
		{ after(grammarAccess.getEntityFeatureAccess().getTypeLScalarTypeCrossReference_2_1_1_1_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__NameAssignment_2_1_1_1_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getNameTRANSLATABLEIDParserRuleCall_2_1_1_1_3_0()); }
		ruleTRANSLATABLEID
		{ after(grammarAccess.getEntityFeatureAccess().getNameTRANSLATABLEIDParserRuleCall_2_1_1_1_3_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__PropertiesAssignment_2_1_1_1_4_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getPropertiesKeyAndValueParserRuleCall_2_1_1_1_4_2_0()); }
		ruleKeyAndValue
		{ after(grammarAccess.getEntityFeatureAccess().getPropertiesKeyAndValueParserRuleCall_2_1_1_1_4_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__PropertiesAssignment_2_1_1_1_4_3_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getPropertiesKeyAndValueParserRuleCall_2_1_1_1_4_3_1_0()); }
		ruleKeyAndValue
		{ after(grammarAccess.getEntityFeatureAccess().getPropertiesKeyAndValueParserRuleCall_2_1_1_1_4_3_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__DerivedGetterExpressionAssignment_2_1_1_1_5
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getDerivedGetterExpressionXBlockExpressionParserRuleCall_2_1_1_1_5_0()); }
		ruleXBlockExpression
		{ after(grammarAccess.getEntityFeatureAccess().getDerivedGetterExpressionXBlockExpressionParserRuleCall_2_1_1_1_5_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__IdAssignment_2_1_1_2_0_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getIdIdKeyword_2_1_1_2_0_1_0()); }
		(
			{ before(grammarAccess.getEntityFeatureAccess().getIdIdKeyword_2_1_1_2_0_1_0()); }
			'id'
			{ after(grammarAccess.getEntityFeatureAccess().getIdIdKeyword_2_1_1_2_0_1_0()); }
		)
		{ after(grammarAccess.getEntityFeatureAccess().getIdIdKeyword_2_1_1_2_0_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__UuidAssignment_2_1_1_2_0_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getUuidUuidKeyword_2_1_1_2_0_2_0()); }
		(
			{ before(grammarAccess.getEntityFeatureAccess().getUuidUuidKeyword_2_1_1_2_0_2_0()); }
			'uuid'
			{ after(grammarAccess.getEntityFeatureAccess().getUuidUuidKeyword_2_1_1_2_0_2_0()); }
		)
		{ after(grammarAccess.getEntityFeatureAccess().getUuidUuidKeyword_2_1_1_2_0_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__VersionAssignment_2_1_1_2_0_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getVersionVersionKeyword_2_1_1_2_0_3_0()); }
		(
			{ before(grammarAccess.getEntityFeatureAccess().getVersionVersionKeyword_2_1_1_2_0_3_0()); }
			'version'
			{ after(grammarAccess.getEntityFeatureAccess().getVersionVersionKeyword_2_1_1_2_0_3_0()); }
		)
		{ after(grammarAccess.getEntityFeatureAccess().getVersionVersionKeyword_2_1_1_2_0_3_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__DomainDescriptionAssignment_2_1_1_2_0_4
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getDomainDescriptionDomainDescriptionKeyword_2_1_1_2_0_4_0()); }
		(
			{ before(grammarAccess.getEntityFeatureAccess().getDomainDescriptionDomainDescriptionKeyword_2_1_1_2_0_4_0()); }
			'domainDescription'
			{ after(grammarAccess.getEntityFeatureAccess().getDomainDescriptionDomainDescriptionKeyword_2_1_1_2_0_4_0()); }
		)
		{ after(grammarAccess.getEntityFeatureAccess().getDomainDescriptionDomainDescriptionKeyword_2_1_1_2_0_4_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__DomainKeyAssignment_2_1_1_2_0_5
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getDomainKeyDomainKeyKeyword_2_1_1_2_0_5_0()); }
		(
			{ before(grammarAccess.getEntityFeatureAccess().getDomainKeyDomainKeyKeyword_2_1_1_2_0_5_0()); }
			'domainKey'
			{ after(grammarAccess.getEntityFeatureAccess().getDomainKeyDomainKeyKeyword_2_1_1_2_0_5_0()); }
		)
		{ after(grammarAccess.getEntityFeatureAccess().getDomainKeyDomainKeyKeyword_2_1_1_2_0_5_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__UniqueEntryAssignment_2_1_1_2_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getUniqueEntryUniqueKeyword_2_1_1_2_1_0()); }
		(
			{ before(grammarAccess.getEntityFeatureAccess().getUniqueEntryUniqueKeyword_2_1_1_2_1_0()); }
			'unique'
			{ after(grammarAccess.getEntityFeatureAccess().getUniqueEntryUniqueKeyword_2_1_1_2_1_0()); }
		)
		{ after(grammarAccess.getEntityFeatureAccess().getUniqueEntryUniqueKeyword_2_1_1_2_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__FilteringAssignment_2_1_1_2_2_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getFilteringFilterKeyword_2_1_1_2_2_0_0()); }
		(
			{ before(grammarAccess.getEntityFeatureAccess().getFilteringFilterKeyword_2_1_1_2_2_0_0()); }
			'filter'
			{ after(grammarAccess.getEntityFeatureAccess().getFilteringFilterKeyword_2_1_1_2_2_0_0()); }
		)
		{ after(grammarAccess.getEntityFeatureAccess().getFilteringFilterKeyword_2_1_1_2_2_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__RangeFilteringAssignment_2_1_1_2_2_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getRangeFilteringRangeKeyword_2_1_1_2_2_1_0()); }
		(
			{ before(grammarAccess.getEntityFeatureAccess().getRangeFilteringRangeKeyword_2_1_1_2_2_1_0()); }
			'range'
			{ after(grammarAccess.getEntityFeatureAccess().getRangeFilteringRangeKeyword_2_1_1_2_2_1_0()); }
		)
		{ after(grammarAccess.getEntityFeatureAccess().getRangeFilteringRangeKeyword_2_1_1_2_2_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__TypeAssignment_2_1_1_2_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getTypeLScalarTypeCrossReference_2_1_1_2_3_0()); }
		(
			{ before(grammarAccess.getEntityFeatureAccess().getTypeLScalarTypeTYPE_CROSS_REFERENCEParserRuleCall_2_1_1_2_3_0_1()); }
			ruleTYPE_CROSS_REFERENCE
			{ after(grammarAccess.getEntityFeatureAccess().getTypeLScalarTypeTYPE_CROSS_REFERENCEParserRuleCall_2_1_1_2_3_0_1()); }
		)
		{ after(grammarAccess.getEntityFeatureAccess().getTypeLScalarTypeCrossReference_2_1_1_2_3_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__MultiplicityAssignment_2_1_1_2_4
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getMultiplicityMultiplicityParserRuleCall_2_1_1_2_4_0()); }
		ruleMultiplicity
		{ after(grammarAccess.getEntityFeatureAccess().getMultiplicityMultiplicityParserRuleCall_2_1_1_2_4_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__ConstraintsAssignment_2_1_1_2_5_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getConstraintsAllConstraintsParserRuleCall_2_1_1_2_5_1_0()); }
		ruleAllConstraints
		{ after(grammarAccess.getEntityFeatureAccess().getConstraintsAllConstraintsParserRuleCall_2_1_1_2_5_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__NameAssignment_2_1_1_2_6
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getNameTRANSLATABLEIDParserRuleCall_2_1_1_2_6_0()); }
		ruleTRANSLATABLEID
		{ after(grammarAccess.getEntityFeatureAccess().getNameTRANSLATABLEIDParserRuleCall_2_1_1_2_6_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__OnKanbanCardAssignment_2_1_1_2_7_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getOnKanbanCardOnKanbanCardKeyword_2_1_1_2_7_0_0()); }
		(
			{ before(grammarAccess.getEntityFeatureAccess().getOnKanbanCardOnKanbanCardKeyword_2_1_1_2_7_0_0()); }
			'onKanbanCard'
			{ after(grammarAccess.getEntityFeatureAccess().getOnKanbanCardOnKanbanCardKeyword_2_1_1_2_7_0_0()); }
		)
		{ after(grammarAccess.getEntityFeatureAccess().getOnKanbanCardOnKanbanCardKeyword_2_1_1_2_7_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__OnKanbanCardStatesAssignment_2_1_1_2_7_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getOnKanbanCardStatesKanbanStateDetailParserRuleCall_2_1_1_2_7_1_0()); }
		ruleKanbanStateDetail
		{ after(grammarAccess.getEntityFeatureAccess().getOnKanbanCardStatesKanbanStateDetailParserRuleCall_2_1_1_2_7_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__AsKanbanStateAssignment_2_1_1_2_8
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getAsKanbanStateAsKanbanStateKeyword_2_1_1_2_8_0()); }
		(
			{ before(grammarAccess.getEntityFeatureAccess().getAsKanbanStateAsKanbanStateKeyword_2_1_1_2_8_0()); }
			'asKanbanState'
			{ after(grammarAccess.getEntityFeatureAccess().getAsKanbanStateAsKanbanStateKeyword_2_1_1_2_8_0()); }
		)
		{ after(grammarAccess.getEntityFeatureAccess().getAsKanbanStateAsKanbanStateKeyword_2_1_1_2_8_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__AsKanbanOrderingAssignment_2_1_1_2_9_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getAsKanbanOrderingAsKanbanOrderingKeyword_2_1_1_2_9_0_0()); }
		(
			{ before(grammarAccess.getEntityFeatureAccess().getAsKanbanOrderingAsKanbanOrderingKeyword_2_1_1_2_9_0_0()); }
			'asKanbanOrdering'
			{ after(grammarAccess.getEntityFeatureAccess().getAsKanbanOrderingAsKanbanOrderingKeyword_2_1_1_2_9_0_0()); }
		)
		{ after(grammarAccess.getEntityFeatureAccess().getAsKanbanOrderingAsKanbanOrderingKeyword_2_1_1_2_9_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__DecentKanbanOrderAssignment_2_1_1_2_9_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getDecentKanbanOrderDecentOrderKeyword_2_1_1_2_9_1_0()); }
		(
			{ before(grammarAccess.getEntityFeatureAccess().getDecentKanbanOrderDecentOrderKeyword_2_1_1_2_9_1_0()); }
			'decentOrder'
			{ after(grammarAccess.getEntityFeatureAccess().getDecentKanbanOrderDecentOrderKeyword_2_1_1_2_9_1_0()); }
		)
		{ after(grammarAccess.getEntityFeatureAccess().getDecentKanbanOrderDecentOrderKeyword_2_1_1_2_9_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__PersistenceInfoAssignment_2_1_1_2_10
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getPersistenceInfoColumnPersistenceInfoParserRuleCall_2_1_1_2_10_0()); }
		ruleColumnPersistenceInfo
		{ after(grammarAccess.getEntityFeatureAccess().getPersistenceInfoColumnPersistenceInfoParserRuleCall_2_1_1_2_10_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__OppositeAssignment_2_1_1_2_11_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getOppositeLBeanReferenceCrossReference_2_1_1_2_11_1_0()); }
		(
			{ before(grammarAccess.getEntityFeatureAccess().getOppositeLBeanReferenceLFQNParserRuleCall_2_1_1_2_11_1_0_1()); }
			ruleLFQN
			{ after(grammarAccess.getEntityFeatureAccess().getOppositeLBeanReferenceLFQNParserRuleCall_2_1_1_2_11_1_0_1()); }
		)
		{ after(grammarAccess.getEntityFeatureAccess().getOppositeLBeanReferenceCrossReference_2_1_1_2_11_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__PropertiesAssignment_2_1_1_2_12_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getPropertiesKeyAndValueParserRuleCall_2_1_1_2_12_2_0()); }
		ruleKeyAndValue
		{ after(grammarAccess.getEntityFeatureAccess().getPropertiesKeyAndValueParserRuleCall_2_1_1_2_12_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__PropertiesAssignment_2_1_1_2_12_3_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getPropertiesKeyAndValueParserRuleCall_2_1_1_2_12_3_1_0()); }
		ruleKeyAndValue
		{ after(grammarAccess.getEntityFeatureAccess().getPropertiesKeyAndValueParserRuleCall_2_1_1_2_12_3_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__TypeAssignment_2_2_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getTypeJvmTypeReferenceParserRuleCall_2_2_1_1_0()); }
		ruleJvmTypeReference
		{ after(grammarAccess.getEntityFeatureAccess().getTypeJvmTypeReferenceParserRuleCall_2_2_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__NameAssignment_2_2_1_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getNameValidIDWithKeywordsParserRuleCall_2_2_1_2_0()); }
		ruleValidIDWithKeywords
		{ after(grammarAccess.getEntityFeatureAccess().getNameValidIDWithKeywordsParserRuleCall_2_2_1_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__ParamsAssignment_2_2_1_4_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getParamsFullJvmFormalParameterParserRuleCall_2_2_1_4_0_0()); }
		ruleFullJvmFormalParameter
		{ after(grammarAccess.getEntityFeatureAccess().getParamsFullJvmFormalParameterParserRuleCall_2_2_1_4_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__ParamsAssignment_2_2_1_4_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getParamsFullJvmFormalParameterParserRuleCall_2_2_1_4_1_1_0()); }
		ruleFullJvmFormalParameter
		{ after(grammarAccess.getEntityFeatureAccess().getParamsFullJvmFormalParameterParserRuleCall_2_2_1_4_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeature__BodyAssignment_2_2_1_6
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeatureAccess().getBodyXExpressionParserRuleCall_2_2_1_6_0()); }
		ruleXExpression
		{ after(grammarAccess.getEntityFeatureAccess().getBodyXExpressionParserRuleCall_2_2_1_6_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__KanbanStateDetail__InfosAssignment_3_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getKanbanStateDetailAccess().getInfosKanbanEnumInfoParserRuleCall_3_0_0()); }
		ruleKanbanEnumInfo
		{ after(grammarAccess.getKanbanStateDetailAccess().getInfosKanbanEnumInfoParserRuleCall_3_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__KanbanStateDetail__InfosAssignment_3_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getKanbanStateDetailAccess().getInfosKanbanEnumInfoParserRuleCall_3_1_1_0()); }
		ruleKanbanEnumInfo
		{ after(grammarAccess.getKanbanStateDetailAccess().getInfosKanbanEnumInfoParserRuleCall_3_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__KanbanEnumInfo__LiteralAssignment_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getKanbanEnumInfoAccess().getLiteralLEnumLiteralCrossReference_0_0()); }
		(
			{ before(grammarAccess.getKanbanEnumInfoAccess().getLiteralLEnumLiteralIDTerminalRuleCall_0_0_1()); }
			RULE_ID
			{ after(grammarAccess.getKanbanEnumInfoAccess().getLiteralLEnumLiteralIDTerminalRuleCall_0_0_1()); }
		)
		{ after(grammarAccess.getKanbanEnumInfoAccess().getLiteralLEnumLiteralCrossReference_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__KanbanEnumInfo__I18nKeyAssignment_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getKanbanEnumInfoAccess().getI18nKeySTRINGTerminalRuleCall_1_1_0()); }
		RULE_STRING
		{ after(grammarAccess.getKanbanEnumInfoAccess().getI18nKeySTRINGTerminalRuleCall_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__AnnotationsAssignment_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBeanFeatureAccess().getAnnotationsAnnotationDefParserRuleCall_1_0()); }
		ruleAnnotationDef
		{ after(grammarAccess.getBeanFeatureAccess().getAnnotationsAnnotationDefParserRuleCall_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__CascadingAssignment_2_0_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBeanFeatureAccess().getCascadingCascadeKeyword_2_0_1_1_0()); }
		(
			{ before(grammarAccess.getBeanFeatureAccess().getCascadingCascadeKeyword_2_0_1_1_0()); }
			'cascade'
			{ after(grammarAccess.getBeanFeatureAccess().getCascadingCascadeKeyword_2_0_1_1_0()); }
		)
		{ after(grammarAccess.getBeanFeatureAccess().getCascadingCascadeKeyword_2_0_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__TypeAssignment_2_0_1_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBeanFeatureAccess().getTypeLTypeCrossReference_2_0_1_2_0()); }
		(
			{ before(grammarAccess.getBeanFeatureAccess().getTypeLTypeTYPE_CROSS_REFERENCEParserRuleCall_2_0_1_2_0_1()); }
			ruleTYPE_CROSS_REFERENCE
			{ after(grammarAccess.getBeanFeatureAccess().getTypeLTypeTYPE_CROSS_REFERENCEParserRuleCall_2_0_1_2_0_1()); }
		)
		{ after(grammarAccess.getBeanFeatureAccess().getTypeLTypeCrossReference_2_0_1_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__MultiplicityAssignment_2_0_1_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBeanFeatureAccess().getMultiplicityMultiplicityParserRuleCall_2_0_1_3_0()); }
		ruleMultiplicity
		{ after(grammarAccess.getBeanFeatureAccess().getMultiplicityMultiplicityParserRuleCall_2_0_1_3_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__ConstraintsAssignment_2_0_1_4_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBeanFeatureAccess().getConstraintsAllConstraintsParserRuleCall_2_0_1_4_1_0()); }
		ruleAllConstraints
		{ after(grammarAccess.getBeanFeatureAccess().getConstraintsAllConstraintsParserRuleCall_2_0_1_4_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__NameAssignment_2_0_1_5
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBeanFeatureAccess().getNameTRANSLATABLEIDParserRuleCall_2_0_1_5_0()); }
		ruleTRANSLATABLEID
		{ after(grammarAccess.getBeanFeatureAccess().getNameTRANSLATABLEIDParserRuleCall_2_0_1_5_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__OppositeAssignment_2_0_1_6_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBeanFeatureAccess().getOppositeLReferenceCrossReference_2_0_1_6_1_0()); }
		(
			{ before(grammarAccess.getBeanFeatureAccess().getOppositeLReferenceLFQNParserRuleCall_2_0_1_6_1_0_1()); }
			ruleLFQN
			{ after(grammarAccess.getBeanFeatureAccess().getOppositeLReferenceLFQNParserRuleCall_2_0_1_6_1_0_1()); }
		)
		{ after(grammarAccess.getBeanFeatureAccess().getOppositeLReferenceCrossReference_2_0_1_6_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__PropertiesAssignment_2_0_1_7_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBeanFeatureAccess().getPropertiesKeyAndValueParserRuleCall_2_0_1_7_2_0()); }
		ruleKeyAndValue
		{ after(grammarAccess.getBeanFeatureAccess().getPropertiesKeyAndValueParserRuleCall_2_0_1_7_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__PropertiesAssignment_2_0_1_7_3_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBeanFeatureAccess().getPropertiesKeyAndValueParserRuleCall_2_0_1_7_3_1_0()); }
		ruleKeyAndValue
		{ after(grammarAccess.getBeanFeatureAccess().getPropertiesKeyAndValueParserRuleCall_2_0_1_7_3_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__ResultFiltersAssignment_2_0_1_8
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBeanFeatureAccess().getResultFiltersResultFiltersParserRuleCall_2_0_1_8_0()); }
		ruleResultFilters
		{ after(grammarAccess.getBeanFeatureAccess().getResultFiltersResultFiltersParserRuleCall_2_0_1_8_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__TransientAssignment_2_1_1_0_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBeanFeatureAccess().getTransientTransientKeyword_2_1_1_0_0_0()); }
		(
			{ before(grammarAccess.getBeanFeatureAccess().getTransientTransientKeyword_2_1_1_0_0_0()); }
			'transient'
			{ after(grammarAccess.getBeanFeatureAccess().getTransientTransientKeyword_2_1_1_0_0_0()); }
		)
		{ after(grammarAccess.getBeanFeatureAccess().getTransientTransientKeyword_2_1_1_0_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__TypeAssignment_2_1_1_0_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBeanFeatureAccess().getTypeLScalarTypeCrossReference_2_1_1_0_1_0()); }
		(
			{ before(grammarAccess.getBeanFeatureAccess().getTypeLScalarTypeTYPE_CROSS_REFERENCEParserRuleCall_2_1_1_0_1_0_1()); }
			ruleTYPE_CROSS_REFERENCE
			{ after(grammarAccess.getBeanFeatureAccess().getTypeLScalarTypeTYPE_CROSS_REFERENCEParserRuleCall_2_1_1_0_1_0_1()); }
		)
		{ after(grammarAccess.getBeanFeatureAccess().getTypeLScalarTypeCrossReference_2_1_1_0_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__ConstraintsAssignment_2_1_1_0_2_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBeanFeatureAccess().getConstraintsAllConstraintsParserRuleCall_2_1_1_0_2_1_0()); }
		ruleAllConstraints
		{ after(grammarAccess.getBeanFeatureAccess().getConstraintsAllConstraintsParserRuleCall_2_1_1_0_2_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__NameAssignment_2_1_1_0_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBeanFeatureAccess().getNameTRANSLATABLEIDParserRuleCall_2_1_1_0_3_0()); }
		ruleTRANSLATABLEID
		{ after(grammarAccess.getBeanFeatureAccess().getNameTRANSLATABLEIDParserRuleCall_2_1_1_0_3_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__PropertiesAssignment_2_1_1_0_4_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBeanFeatureAccess().getPropertiesKeyAndValueParserRuleCall_2_1_1_0_4_2_0()); }
		ruleKeyAndValue
		{ after(grammarAccess.getBeanFeatureAccess().getPropertiesKeyAndValueParserRuleCall_2_1_1_0_4_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__PropertiesAssignment_2_1_1_0_4_3_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBeanFeatureAccess().getPropertiesKeyAndValueParserRuleCall_2_1_1_0_4_3_1_0()); }
		ruleKeyAndValue
		{ after(grammarAccess.getBeanFeatureAccess().getPropertiesKeyAndValueParserRuleCall_2_1_1_0_4_3_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__IdAssignment_2_1_1_1_0_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBeanFeatureAccess().getIdIdKeyword_2_1_1_1_0_1_0()); }
		(
			{ before(grammarAccess.getBeanFeatureAccess().getIdIdKeyword_2_1_1_1_0_1_0()); }
			'id'
			{ after(grammarAccess.getBeanFeatureAccess().getIdIdKeyword_2_1_1_1_0_1_0()); }
		)
		{ after(grammarAccess.getBeanFeatureAccess().getIdIdKeyword_2_1_1_1_0_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__VersionAssignment_2_1_1_1_0_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBeanFeatureAccess().getVersionVersionKeyword_2_1_1_1_0_2_0()); }
		(
			{ before(grammarAccess.getBeanFeatureAccess().getVersionVersionKeyword_2_1_1_1_0_2_0()); }
			'version'
			{ after(grammarAccess.getBeanFeatureAccess().getVersionVersionKeyword_2_1_1_1_0_2_0()); }
		)
		{ after(grammarAccess.getBeanFeatureAccess().getVersionVersionKeyword_2_1_1_1_0_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__FilteringAssignment_2_1_1_1_1_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBeanFeatureAccess().getFilteringFilterKeyword_2_1_1_1_1_0_0()); }
		(
			{ before(grammarAccess.getBeanFeatureAccess().getFilteringFilterKeyword_2_1_1_1_1_0_0()); }
			'filter'
			{ after(grammarAccess.getBeanFeatureAccess().getFilteringFilterKeyword_2_1_1_1_1_0_0()); }
		)
		{ after(grammarAccess.getBeanFeatureAccess().getFilteringFilterKeyword_2_1_1_1_1_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__RangeFilteringAssignment_2_1_1_1_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBeanFeatureAccess().getRangeFilteringRangeKeyword_2_1_1_1_1_1_0()); }
		(
			{ before(grammarAccess.getBeanFeatureAccess().getRangeFilteringRangeKeyword_2_1_1_1_1_1_0()); }
			'range'
			{ after(grammarAccess.getBeanFeatureAccess().getRangeFilteringRangeKeyword_2_1_1_1_1_1_0()); }
		)
		{ after(grammarAccess.getBeanFeatureAccess().getRangeFilteringRangeKeyword_2_1_1_1_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__TypeAssignment_2_1_1_1_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBeanFeatureAccess().getTypeLScalarTypeCrossReference_2_1_1_1_2_0()); }
		(
			{ before(grammarAccess.getBeanFeatureAccess().getTypeLScalarTypeTYPE_CROSS_REFERENCEParserRuleCall_2_1_1_1_2_0_1()); }
			ruleTYPE_CROSS_REFERENCE
			{ after(grammarAccess.getBeanFeatureAccess().getTypeLScalarTypeTYPE_CROSS_REFERENCEParserRuleCall_2_1_1_1_2_0_1()); }
		)
		{ after(grammarAccess.getBeanFeatureAccess().getTypeLScalarTypeCrossReference_2_1_1_1_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__MultiplicityAssignment_2_1_1_1_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBeanFeatureAccess().getMultiplicityMultiplicityParserRuleCall_2_1_1_1_3_0()); }
		ruleMultiplicity
		{ after(grammarAccess.getBeanFeatureAccess().getMultiplicityMultiplicityParserRuleCall_2_1_1_1_3_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__ConstraintsAssignment_2_1_1_1_4_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBeanFeatureAccess().getConstraintsAllConstraintsParserRuleCall_2_1_1_1_4_1_0()); }
		ruleAllConstraints
		{ after(grammarAccess.getBeanFeatureAccess().getConstraintsAllConstraintsParserRuleCall_2_1_1_1_4_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__NameAssignment_2_1_1_1_5
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBeanFeatureAccess().getNameTRANSLATABLEIDParserRuleCall_2_1_1_1_5_0()); }
		ruleTRANSLATABLEID
		{ after(grammarAccess.getBeanFeatureAccess().getNameTRANSLATABLEIDParserRuleCall_2_1_1_1_5_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__PropertiesAssignment_2_1_1_1_6_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBeanFeatureAccess().getPropertiesKeyAndValueParserRuleCall_2_1_1_1_6_2_0()); }
		ruleKeyAndValue
		{ after(grammarAccess.getBeanFeatureAccess().getPropertiesKeyAndValueParserRuleCall_2_1_1_1_6_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__PropertiesAssignment_2_1_1_1_6_3_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBeanFeatureAccess().getPropertiesKeyAndValueParserRuleCall_2_1_1_1_6_3_1_0()); }
		ruleKeyAndValue
		{ after(grammarAccess.getBeanFeatureAccess().getPropertiesKeyAndValueParserRuleCall_2_1_1_1_6_3_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__TypeAssignment_2_2_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBeanFeatureAccess().getTypeJvmTypeReferenceParserRuleCall_2_2_1_1_0()); }
		ruleJvmTypeReference
		{ after(grammarAccess.getBeanFeatureAccess().getTypeJvmTypeReferenceParserRuleCall_2_2_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__NameAssignment_2_2_1_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBeanFeatureAccess().getNameValidIDWithKeywordsParserRuleCall_2_2_1_2_0()); }
		ruleValidIDWithKeywords
		{ after(grammarAccess.getBeanFeatureAccess().getNameValidIDWithKeywordsParserRuleCall_2_2_1_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__ParamsAssignment_2_2_1_4_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBeanFeatureAccess().getParamsFullJvmFormalParameterParserRuleCall_2_2_1_4_0_0()); }
		ruleFullJvmFormalParameter
		{ after(grammarAccess.getBeanFeatureAccess().getParamsFullJvmFormalParameterParserRuleCall_2_2_1_4_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__ParamsAssignment_2_2_1_4_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBeanFeatureAccess().getParamsFullJvmFormalParameterParserRuleCall_2_2_1_4_1_1_0()); }
		ruleFullJvmFormalParameter
		{ after(grammarAccess.getBeanFeatureAccess().getParamsFullJvmFormalParameterParserRuleCall_2_2_1_4_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__BeanFeature__BodyAssignment_2_2_1_6
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getBeanFeatureAccess().getBodyXExpressionParserRuleCall_2_2_1_6_0()); }
		ruleXExpression
		{ after(grammarAccess.getBeanFeatureAccess().getBodyXExpressionParserRuleCall_2_2_1_6_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntitySuperIndex__NameAssignment_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntitySuperIndexAccess().getNameTRANSLATABLEIDParserRuleCall_1_0()); }
		ruleTRANSLATABLEID
		{ after(grammarAccess.getEntitySuperIndexAccess().getNameTRANSLATABLEIDParserRuleCall_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntitySuperIndex__AttributesAssignment_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntitySuperIndexAccess().getAttributesEntitySuperIndexAttributeParserRuleCall_3_0()); }
		ruleEntitySuperIndexAttribute
		{ after(grammarAccess.getEntitySuperIndexAccess().getAttributesEntitySuperIndexAttributeParserRuleCall_3_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntitySuperIndexAttribute__FeatureAssignment_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntitySuperIndexAttributeAccess().getFeatureLFeatureCrossReference_1_0()); }
		(
			{ before(grammarAccess.getEntitySuperIndexAttributeAccess().getFeatureLFeatureIDTerminalRuleCall_1_0_1()); }
			RULE_ID
			{ after(grammarAccess.getEntitySuperIndexAttributeAccess().getFeatureLFeatureIDTerminalRuleCall_1_0_1()); }
		)
		{ after(grammarAccess.getEntitySuperIndexAttributeAccess().getFeatureLFeatureCrossReference_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntitySuperIndexAttribute__TailAssignment_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntitySuperIndexAttributeAccess().getTailEntityFeaturePathSegmentParserRuleCall_2_0()); }
		ruleEntityFeaturePathSegment
		{ after(grammarAccess.getEntitySuperIndexAttributeAccess().getTailEntityFeaturePathSegmentParserRuleCall_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeaturePathSegment__FeatureAssignment_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeaturePathSegmentAccess().getFeatureLFeatureCrossReference_2_0()); }
		(
			{ before(grammarAccess.getEntityFeaturePathSegmentAccess().getFeatureLFeatureIDTerminalRuleCall_2_0_1()); }
			RULE_ID
			{ after(grammarAccess.getEntityFeaturePathSegmentAccess().getFeatureLFeatureIDTerminalRuleCall_2_0_1()); }
		)
		{ after(grammarAccess.getEntityFeaturePathSegmentAccess().getFeatureLFeatureCrossReference_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EntityFeaturePathSegment__TailAssignment_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEntityFeaturePathSegmentAccess().getTailEntityFeaturePathSegmentParserRuleCall_3_0()); }
		ruleEntityFeaturePathSegment
		{ after(grammarAccess.getEntityFeaturePathSegmentAccess().getTailEntityFeaturePathSegmentParserRuleCall_3_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerClassStrategy__DiscriminatorColumnAssignment_3_0_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getTablePerClassStrategyAccess().getDiscriminatorColumnValidIDWithKeywordsParserRuleCall_3_0_1_0()); }
		ruleValidIDWithKeywords
		{ after(grammarAccess.getTablePerClassStrategyAccess().getDiscriminatorColumnValidIDWithKeywordsParserRuleCall_3_0_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerClassStrategy__DiscriminatorTypeAssignment_3_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getTablePerClassStrategyAccess().getDiscriminatorTypeDiscriminatorTypeEnumRuleCall_3_1_1_0()); }
		ruleDiscriminatorType
		{ after(grammarAccess.getTablePerClassStrategyAccess().getDiscriminatorTypeDiscriminatorTypeEnumRuleCall_3_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerClassStrategy__DiscriminatorValueAssignment_3_2_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getTablePerClassStrategyAccess().getDiscriminatorValueValidIDWithKeywordsParserRuleCall_3_2_1_0()); }
		ruleValidIDWithKeywords
		{ after(grammarAccess.getTablePerClassStrategyAccess().getDiscriminatorValueValidIDWithKeywordsParserRuleCall_3_2_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerSubclassStrategy__DiscriminatorColumnAssignment_3_0_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getTablePerSubclassStrategyAccess().getDiscriminatorColumnValidIDWithKeywordsParserRuleCall_3_0_1_0()); }
		ruleValidIDWithKeywords
		{ after(grammarAccess.getTablePerSubclassStrategyAccess().getDiscriminatorColumnValidIDWithKeywordsParserRuleCall_3_0_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerSubclassStrategy__DiscriminatorTypeAssignment_3_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getTablePerSubclassStrategyAccess().getDiscriminatorTypeDiscriminatorTypeEnumRuleCall_3_1_1_0()); }
		ruleDiscriminatorType
		{ after(grammarAccess.getTablePerSubclassStrategyAccess().getDiscriminatorTypeDiscriminatorTypeEnumRuleCall_3_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__TablePerSubclassStrategy__DiscriminatorValueAssignment_3_2_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getTablePerSubclassStrategyAccess().getDiscriminatorValueValidIDWithKeywordsParserRuleCall_3_2_1_0()); }
		ruleValidIDWithKeywords
		{ after(grammarAccess.getTablePerSubclassStrategyAccess().getDiscriminatorValueValidIDWithKeywordsParserRuleCall_3_2_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__TypedPackage__NameAssignment_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getTypedPackageAccess().getNameQualifiedNameParserRuleCall_2_0()); }
		ruleQualifiedName
		{ after(grammarAccess.getTypedPackageAccess().getNameQualifiedNameParserRuleCall_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__TypedPackage__TypesAssignment_3_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getTypedPackageAccess().getTypesTypeParserRuleCall_3_1_0()); }
		ruleType
		{ after(grammarAccess.getTypedPackageAccess().getTypesTypeParserRuleCall_3_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__NameAssignment_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDataTypeAccess().getNameValidIDWithKeywordsParserRuleCall_1_0()); }
		ruleValidIDWithKeywords
		{ after(grammarAccess.getDataTypeAccess().getNameValidIDWithKeywordsParserRuleCall_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__JvmTypeReferenceAssignment_2_0_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDataTypeAccess().getJvmTypeReferenceJvmTypeReferenceParserRuleCall_2_0_1_0()); }
		ruleJvmTypeReference
		{ after(grammarAccess.getDataTypeAccess().getJvmTypeReferenceJvmTypeReferenceParserRuleCall_2_0_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__AsPrimitiveAssignment_2_0_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDataTypeAccess().getAsPrimitiveAsPrimitiveKeyword_2_0_2_0()); }
		(
			{ before(grammarAccess.getDataTypeAccess().getAsPrimitiveAsPrimitiveKeyword_2_0_2_0()); }
			'asPrimitive'
			{ after(grammarAccess.getDataTypeAccess().getAsPrimitiveAsPrimitiveKeyword_2_0_2_0()); }
		)
		{ after(grammarAccess.getDataTypeAccess().getAsPrimitiveAsPrimitiveKeyword_2_0_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__ConstraintsAssignment_2_0_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDataTypeAccess().getConstraintsDataTypeConstraintParserRuleCall_2_0_3_0()); }
		ruleDataTypeConstraint
		{ after(grammarAccess.getDataTypeAccess().getConstraintsDataTypeConstraintParserRuleCall_2_0_3_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__PropertiesAssignment_2_0_4_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDataTypeAccess().getPropertiesKeyAndValueParserRuleCall_2_0_4_2_0()); }
		ruleKeyAndValue
		{ after(grammarAccess.getDataTypeAccess().getPropertiesKeyAndValueParserRuleCall_2_0_4_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__PropertiesAssignment_2_0_4_3_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDataTypeAccess().getPropertiesKeyAndValueParserRuleCall_2_0_4_3_1_0()); }
		ruleKeyAndValue
		{ after(grammarAccess.getDataTypeAccess().getPropertiesKeyAndValueParserRuleCall_2_0_4_3_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__DateAssignment_2_1_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDataTypeAccess().getDateDateTypeKeyword_2_1_0_0()); }
		(
			{ before(grammarAccess.getDataTypeAccess().getDateDateTypeKeyword_2_1_0_0()); }
			'dateType'
			{ after(grammarAccess.getDataTypeAccess().getDateDateTypeKeyword_2_1_0_0()); }
		)
		{ after(grammarAccess.getDataTypeAccess().getDateDateTypeKeyword_2_1_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__DateTypeAssignment_2_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDataTypeAccess().getDateTypeDateTypeEnumRuleCall_2_1_1_0()); }
		ruleDateType
		{ after(grammarAccess.getDataTypeAccess().getDateTypeDateTypeEnumRuleCall_2_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__ConstraintsAssignment_2_1_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDataTypeAccess().getConstraintsDateConstraintParserRuleCall_2_1_2_0()); }
		ruleDateConstraint
		{ after(grammarAccess.getDataTypeAccess().getConstraintsDateConstraintParserRuleCall_2_1_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__PropertiesAssignment_2_1_3_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDataTypeAccess().getPropertiesKeyAndValueParserRuleCall_2_1_3_2_0()); }
		ruleKeyAndValue
		{ after(grammarAccess.getDataTypeAccess().getPropertiesKeyAndValueParserRuleCall_2_1_3_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__PropertiesAssignment_2_1_3_3_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDataTypeAccess().getPropertiesKeyAndValueParserRuleCall_2_1_3_3_1_0()); }
		ruleKeyAndValue
		{ after(grammarAccess.getDataTypeAccess().getPropertiesKeyAndValueParserRuleCall_2_1_3_3_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__AsBlobAssignment_2_2_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDataTypeAccess().getAsBlobAsBlobKeyword_2_2_0_0()); }
		(
			{ before(grammarAccess.getDataTypeAccess().getAsBlobAsBlobKeyword_2_2_0_0()); }
			'asBlob'
			{ after(grammarAccess.getDataTypeAccess().getAsBlobAsBlobKeyword_2_2_0_0()); }
		)
		{ after(grammarAccess.getDataTypeAccess().getAsBlobAsBlobKeyword_2_2_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__ConstraintsAssignment_2_2_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDataTypeAccess().getConstraintsBlobTypeConstraintParserRuleCall_2_2_1_0()); }
		ruleBlobTypeConstraint
		{ after(grammarAccess.getDataTypeAccess().getConstraintsBlobTypeConstraintParserRuleCall_2_2_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__PropertiesAssignment_2_2_2_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDataTypeAccess().getPropertiesKeyAndValueParserRuleCall_2_2_2_2_0()); }
		ruleKeyAndValue
		{ after(grammarAccess.getDataTypeAccess().getPropertiesKeyAndValueParserRuleCall_2_2_2_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DataType__PropertiesAssignment_2_2_2_3_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDataTypeAccess().getPropertiesKeyAndValueParserRuleCall_2_2_2_3_1_0()); }
		ruleKeyAndValue
		{ after(grammarAccess.getDataTypeAccess().getPropertiesKeyAndValueParserRuleCall_2_2_2_3_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertFalse__MsgCodeAssignment_2_1_0_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCAssertFalseAccess().getMsgCodeQualifiedNameParserRuleCall_2_1_0_2_0()); }
		ruleQualifiedName
		{ after(grammarAccess.getDtCAssertFalseAccess().getMsgCodeQualifiedNameParserRuleCall_2_1_0_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertFalse__MsgI18nKeyAssignment_2_1_1_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCAssertFalseAccess().getMsgI18nKeyQualifiedNameParserRuleCall_2_1_1_2_0()); }
		ruleQualifiedName
		{ after(grammarAccess.getDtCAssertFalseAccess().getMsgI18nKeyQualifiedNameParserRuleCall_2_1_1_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertFalse__SeverityAssignment_2_1_2_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCAssertFalseAccess().getSeverityConstraintSeverityEnumRuleCall_2_1_2_2_0()); }
		ruleConstraintSeverity
		{ after(grammarAccess.getDtCAssertFalseAccess().getSeverityConstraintSeverityEnumRuleCall_2_1_2_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertTrue__MsgCodeAssignment_2_1_0_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCAssertTrueAccess().getMsgCodeQualifiedNameParserRuleCall_2_1_0_2_0()); }
		ruleQualifiedName
		{ after(grammarAccess.getDtCAssertTrueAccess().getMsgCodeQualifiedNameParserRuleCall_2_1_0_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertTrue__MsgI18nKeyAssignment_2_1_1_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCAssertTrueAccess().getMsgI18nKeyQualifiedNameParserRuleCall_2_1_1_2_0()); }
		ruleQualifiedName
		{ after(grammarAccess.getDtCAssertTrueAccess().getMsgI18nKeyQualifiedNameParserRuleCall_2_1_1_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCAssertTrue__SeverityAssignment_2_1_2_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCAssertTrueAccess().getSeverityConstraintSeverityEnumRuleCall_2_1_2_2_0()); }
		ruleConstraintSeverity
		{ after(grammarAccess.getDtCAssertTrueAccess().getSeverityConstraintSeverityEnumRuleCall_2_1_2_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__MaxAssignment_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCDecimalMaxAccess().getMaxLDecimalParserRuleCall_3_0()); }
		ruleLDecimal
		{ after(grammarAccess.getDtCDecimalMaxAccess().getMaxLDecimalParserRuleCall_3_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__MsgCodeAssignment_4_1_0_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCDecimalMaxAccess().getMsgCodeQualifiedNameParserRuleCall_4_1_0_2_0()); }
		ruleQualifiedName
		{ after(grammarAccess.getDtCDecimalMaxAccess().getMsgCodeQualifiedNameParserRuleCall_4_1_0_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__MsgI18nKeyAssignment_4_1_1_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCDecimalMaxAccess().getMsgI18nKeyQualifiedNameParserRuleCall_4_1_1_2_0()); }
		ruleQualifiedName
		{ after(grammarAccess.getDtCDecimalMaxAccess().getMsgI18nKeyQualifiedNameParserRuleCall_4_1_1_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMax__SeverityAssignment_4_1_2_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCDecimalMaxAccess().getSeverityConstraintSeverityEnumRuleCall_4_1_2_2_0()); }
		ruleConstraintSeverity
		{ after(grammarAccess.getDtCDecimalMaxAccess().getSeverityConstraintSeverityEnumRuleCall_4_1_2_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__MinAssignment_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCDecimalMinAccess().getMinLDecimalParserRuleCall_3_0()); }
		ruleLDecimal
		{ after(grammarAccess.getDtCDecimalMinAccess().getMinLDecimalParserRuleCall_3_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__MsgCodeAssignment_4_1_0_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCDecimalMinAccess().getMsgCodeQualifiedNameParserRuleCall_4_1_0_2_0()); }
		ruleQualifiedName
		{ after(grammarAccess.getDtCDecimalMinAccess().getMsgCodeQualifiedNameParserRuleCall_4_1_0_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__MsgI18nKeyAssignment_4_1_1_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCDecimalMinAccess().getMsgI18nKeyQualifiedNameParserRuleCall_4_1_1_2_0()); }
		ruleQualifiedName
		{ after(grammarAccess.getDtCDecimalMinAccess().getMsgI18nKeyQualifiedNameParserRuleCall_4_1_1_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDecimalMin__SeverityAssignment_4_1_2_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCDecimalMinAccess().getSeverityConstraintSeverityEnumRuleCall_4_1_2_2_0()); }
		ruleConstraintSeverity
		{ after(grammarAccess.getDtCDecimalMinAccess().getSeverityConstraintSeverityEnumRuleCall_4_1_2_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__IntDigitsAssignment_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCDigitsAccess().getIntDigitsINTTerminalRuleCall_3_0()); }
		RULE_INT
		{ after(grammarAccess.getDtCDigitsAccess().getIntDigitsINTTerminalRuleCall_3_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__FractionDigitsAssignment_5
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCDigitsAccess().getFractionDigitsINTTerminalRuleCall_5_0()); }
		RULE_INT
		{ after(grammarAccess.getDtCDigitsAccess().getFractionDigitsINTTerminalRuleCall_5_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__MsgCodeAssignment_6_1_0_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCDigitsAccess().getMsgCodeQualifiedNameParserRuleCall_6_1_0_2_0()); }
		ruleQualifiedName
		{ after(grammarAccess.getDtCDigitsAccess().getMsgCodeQualifiedNameParserRuleCall_6_1_0_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__MsgI18nKeyAssignment_6_1_1_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCDigitsAccess().getMsgI18nKeyQualifiedNameParserRuleCall_6_1_1_2_0()); }
		ruleQualifiedName
		{ after(grammarAccess.getDtCDigitsAccess().getMsgI18nKeyQualifiedNameParserRuleCall_6_1_1_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCDigits__SeverityAssignment_6_1_2_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCDigitsAccess().getSeverityConstraintSeverityEnumRuleCall_6_1_2_2_0()); }
		ruleConstraintSeverity
		{ after(grammarAccess.getDtCDigitsAccess().getSeverityConstraintSeverityEnumRuleCall_6_1_2_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCFuture__MsgCodeAssignment_2_1_0_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCFutureAccess().getMsgCodeQualifiedNameParserRuleCall_2_1_0_2_0()); }
		ruleQualifiedName
		{ after(grammarAccess.getDtCFutureAccess().getMsgCodeQualifiedNameParserRuleCall_2_1_0_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCFuture__MsgI18nKeyAssignment_2_1_1_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCFutureAccess().getMsgI18nKeyQualifiedNameParserRuleCall_2_1_1_2_0()); }
		ruleQualifiedName
		{ after(grammarAccess.getDtCFutureAccess().getMsgI18nKeyQualifiedNameParserRuleCall_2_1_1_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCFuture__SeverityAssignment_2_1_2_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCFutureAccess().getSeverityConstraintSeverityEnumRuleCall_2_1_2_2_0()); }
		ruleConstraintSeverity
		{ after(grammarAccess.getDtCFutureAccess().getSeverityConstraintSeverityEnumRuleCall_2_1_2_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCPast__MsgCodeAssignment_2_1_0_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCPastAccess().getMsgCodeQualifiedNameParserRuleCall_2_1_0_2_0()); }
		ruleQualifiedName
		{ after(grammarAccess.getDtCPastAccess().getMsgCodeQualifiedNameParserRuleCall_2_1_0_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCPast__MsgI18nKeyAssignment_2_1_1_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCPastAccess().getMsgI18nKeyQualifiedNameParserRuleCall_2_1_1_2_0()); }
		ruleQualifiedName
		{ after(grammarAccess.getDtCPastAccess().getMsgI18nKeyQualifiedNameParserRuleCall_2_1_1_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCPast__SeverityAssignment_2_1_2_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCPastAccess().getSeverityConstraintSeverityEnumRuleCall_2_1_2_2_0()); }
		ruleConstraintSeverity
		{ after(grammarAccess.getDtCPastAccess().getSeverityConstraintSeverityEnumRuleCall_2_1_2_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__MaxAssignment_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCNumericMaxAccess().getMaxLIntParserRuleCall_3_0()); }
		ruleLInt
		{ after(grammarAccess.getDtCNumericMaxAccess().getMaxLIntParserRuleCall_3_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__MsgCodeAssignment_4_1_0_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCNumericMaxAccess().getMsgCodeQualifiedNameParserRuleCall_4_1_0_2_0()); }
		ruleQualifiedName
		{ after(grammarAccess.getDtCNumericMaxAccess().getMsgCodeQualifiedNameParserRuleCall_4_1_0_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__MsgI18nKeyAssignment_4_1_1_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCNumericMaxAccess().getMsgI18nKeyQualifiedNameParserRuleCall_4_1_1_2_0()); }
		ruleQualifiedName
		{ after(grammarAccess.getDtCNumericMaxAccess().getMsgI18nKeyQualifiedNameParserRuleCall_4_1_1_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMax__SeverityAssignment_4_1_2_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCNumericMaxAccess().getSeverityConstraintSeverityEnumRuleCall_4_1_2_2_0()); }
		ruleConstraintSeverity
		{ after(grammarAccess.getDtCNumericMaxAccess().getSeverityConstraintSeverityEnumRuleCall_4_1_2_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__MinAssignment_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCNumericMinAccess().getMinLIntParserRuleCall_3_0()); }
		ruleLInt
		{ after(grammarAccess.getDtCNumericMinAccess().getMinLIntParserRuleCall_3_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__MsgCodeAssignment_4_1_0_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCNumericMinAccess().getMsgCodeQualifiedNameParserRuleCall_4_1_0_2_0()); }
		ruleQualifiedName
		{ after(grammarAccess.getDtCNumericMinAccess().getMsgCodeQualifiedNameParserRuleCall_4_1_0_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__MsgI18nKeyAssignment_4_1_1_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCNumericMinAccess().getMsgI18nKeyQualifiedNameParserRuleCall_4_1_1_2_0()); }
		ruleQualifiedName
		{ after(grammarAccess.getDtCNumericMinAccess().getMsgI18nKeyQualifiedNameParserRuleCall_4_1_1_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNumericMin__SeverityAssignment_4_1_2_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCNumericMinAccess().getSeverityConstraintSeverityEnumRuleCall_4_1_2_2_0()); }
		ruleConstraintSeverity
		{ after(grammarAccess.getDtCNumericMinAccess().getSeverityConstraintSeverityEnumRuleCall_4_1_2_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNotNull__MsgCodeAssignment_2_1_0_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCNotNullAccess().getMsgCodeQualifiedNameParserRuleCall_2_1_0_2_0()); }
		ruleQualifiedName
		{ after(grammarAccess.getDtCNotNullAccess().getMsgCodeQualifiedNameParserRuleCall_2_1_0_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNotNull__MsgI18nKeyAssignment_2_1_1_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCNotNullAccess().getMsgI18nKeyQualifiedNameParserRuleCall_2_1_1_2_0()); }
		ruleQualifiedName
		{ after(grammarAccess.getDtCNotNullAccess().getMsgI18nKeyQualifiedNameParserRuleCall_2_1_1_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNotNull__SeverityAssignment_2_1_2_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCNotNullAccess().getSeverityConstraintSeverityEnumRuleCall_2_1_2_2_0()); }
		ruleConstraintSeverity
		{ after(grammarAccess.getDtCNotNullAccess().getSeverityConstraintSeverityEnumRuleCall_2_1_2_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNull__MsgCodeAssignment_2_1_0_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCNullAccess().getMsgCodeQualifiedNameParserRuleCall_2_1_0_2_0()); }
		ruleQualifiedName
		{ after(grammarAccess.getDtCNullAccess().getMsgCodeQualifiedNameParserRuleCall_2_1_0_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNull__MsgI18nKeyAssignment_2_1_1_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCNullAccess().getMsgI18nKeyQualifiedNameParserRuleCall_2_1_1_2_0()); }
		ruleQualifiedName
		{ after(grammarAccess.getDtCNullAccess().getMsgI18nKeyQualifiedNameParserRuleCall_2_1_1_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCNull__SeverityAssignment_2_1_2_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCNullAccess().getSeverityConstraintSeverityEnumRuleCall_2_1_2_2_0()); }
		ruleConstraintSeverity
		{ after(grammarAccess.getDtCNullAccess().getSeverityConstraintSeverityEnumRuleCall_2_1_2_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCRegEx__PatternAssignment_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCRegExAccess().getPatternSTRINGTerminalRuleCall_3_0()); }
		RULE_STRING
		{ after(grammarAccess.getDtCRegExAccess().getPatternSTRINGTerminalRuleCall_3_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCRegEx__MsgCodeAssignment_4_1_0_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCRegExAccess().getMsgCodeQualifiedNameParserRuleCall_4_1_0_2_0()); }
		ruleQualifiedName
		{ after(grammarAccess.getDtCRegExAccess().getMsgCodeQualifiedNameParserRuleCall_4_1_0_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCRegEx__MsgI18nKeyAssignment_4_1_1_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCRegExAccess().getMsgI18nKeyQualifiedNameParserRuleCall_4_1_1_2_0()); }
		ruleQualifiedName
		{ after(grammarAccess.getDtCRegExAccess().getMsgI18nKeyQualifiedNameParserRuleCall_4_1_1_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCRegEx__SeverityAssignment_4_1_2_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCRegExAccess().getSeverityConstraintSeverityEnumRuleCall_4_1_2_2_0()); }
		ruleConstraintSeverity
		{ after(grammarAccess.getDtCRegExAccess().getSeverityConstraintSeverityEnumRuleCall_4_1_2_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__MinAssignment_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCSizeAccess().getMinINTTerminalRuleCall_3_0()); }
		RULE_INT
		{ after(grammarAccess.getDtCSizeAccess().getMinINTTerminalRuleCall_3_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__MaxAssignment_5
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCSizeAccess().getMaxINTTerminalRuleCall_5_0()); }
		RULE_INT
		{ after(grammarAccess.getDtCSizeAccess().getMaxINTTerminalRuleCall_5_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__MsgCodeAssignment_6_1_0_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCSizeAccess().getMsgCodeQualifiedNameParserRuleCall_6_1_0_2_0()); }
		ruleQualifiedName
		{ after(grammarAccess.getDtCSizeAccess().getMsgCodeQualifiedNameParserRuleCall_6_1_0_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__MsgI18nKeyAssignment_6_1_1_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCSizeAccess().getMsgI18nKeyQualifiedNameParserRuleCall_6_1_1_2_0()); }
		ruleQualifiedName
		{ after(grammarAccess.getDtCSizeAccess().getMsgI18nKeyQualifiedNameParserRuleCall_6_1_1_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__DtCSize__SeverityAssignment_6_1_2_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getDtCSizeAccess().getSeverityConstraintSeverityEnumRuleCall_6_1_2_2_0()); }
		ruleConstraintSeverity
		{ after(grammarAccess.getDtCSizeAccess().getSeverityConstraintSeverityEnumRuleCall_6_1_2_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

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

rule__Enum__LiteralsAssignment_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEnumAccess().getLiteralsEnumLiteralParserRuleCall_3_0()); }
		ruleEnumLiteral
		{ after(grammarAccess.getEnumAccess().getLiteralsEnumLiteralParserRuleCall_3_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__Enum__LiteralsAssignment_4_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEnumAccess().getLiteralsEnumLiteralParserRuleCall_4_1_0()); }
		ruleEnumLiteral
		{ after(grammarAccess.getEnumAccess().getLiteralsEnumLiteralParserRuleCall_4_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EnumLiteral__NameAssignment_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEnumLiteralAccess().getNameTRANSLATABLEIDParserRuleCall_0_0()); }
		ruleTRANSLATABLEID
		{ after(grammarAccess.getEnumLiteralAccess().getNameTRANSLATABLEIDParserRuleCall_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EnumLiteral__DefaultAssignment_1_0_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEnumLiteralAccess().getDefaultAsDefaultKeyword_1_0_1_0()); }
		(
			{ before(grammarAccess.getEnumLiteralAccess().getDefaultAsDefaultKeyword_1_0_1_0()); }
			'asDefault'
			{ after(grammarAccess.getEnumLiteralAccess().getDefaultAsDefaultKeyword_1_0_1_0()); }
		)
		{ after(grammarAccess.getEnumLiteralAccess().getDefaultAsDefaultKeyword_1_0_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EnumLiteral__NullAssignment_1_1_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEnumLiteralAccess().getNullForNullKeyword_1_1_0_0()); }
		(
			{ before(grammarAccess.getEnumLiteralAccess().getNullForNullKeyword_1_1_0_0()); }
			'forNull'
			{ after(grammarAccess.getEnumLiteralAccess().getNullForNullKeyword_1_1_0_0()); }
		)
		{ after(grammarAccess.getEnumLiteralAccess().getNullForNullKeyword_1_1_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__EnumLiteral__ValueAssignment_1_1_2_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getEnumLiteralAccess().getValueINTTerminalRuleCall_1_1_2_1_0()); }
		RULE_INT
		{ after(grammarAccess.getEnumLiteralAccess().getValueINTTerminalRuleCall_1_1_2_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__AnnotationDef__AnnotationAssignment_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getAnnotationDefAccess().getAnnotationXAnnotationParserRuleCall_0_0()); }
		ruleXAnnotation
		{ after(grammarAccess.getAnnotationDefAccess().getAnnotationXAnnotationParserRuleCall_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__ResultFilters__ResultFiltersAssignment_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getResultFiltersAccess().getResultFiltersResultFilterParserRuleCall_3_0()); }
		ruleResultFilter
		{ after(grammarAccess.getResultFiltersAccess().getResultFiltersResultFilterParserRuleCall_3_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__AttributeMatchingConstraint__AttributeAssignment_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getAttributeMatchingConstraintAccess().getAttributeLAttributeCrossReference_0_0()); }
		(
			{ before(grammarAccess.getAttributeMatchingConstraintAccess().getAttributeLAttributeIDTerminalRuleCall_0_0_1()); }
			RULE_ID
			{ after(grammarAccess.getAttributeMatchingConstraintAccess().getAttributeLAttributeIDTerminalRuleCall_0_0_1()); }
		)
		{ after(grammarAccess.getAttributeMatchingConstraintAccess().getAttributeLAttributeCrossReference_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__AttributeMatchingConstraint__ComparatorTypeAssignment_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getAttributeMatchingConstraintAccess().getComparatorTypeLComparatorTypeEnumRuleCall_1_0()); }
		ruleLComparatorType
		{ after(grammarAccess.getAttributeMatchingConstraintAccess().getComparatorTypeLComparatorTypeEnumRuleCall_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__AttributeMatchingConstraint__MatchingValueAssignment_2_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getAttributeMatchingConstraintAccess().getMatchingValueSTRINGTerminalRuleCall_2_0_0()); }
		RULE_STRING
		{ after(grammarAccess.getAttributeMatchingConstraintAccess().getMatchingValueSTRINGTerminalRuleCall_2_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__AttributeMatchingConstraint__MatchingLiteralAssignment_2_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getAttributeMatchingConstraintAccess().getMatchingLiteralLEnumLiteralCrossReference_2_1_0()); }
		(
			{ before(grammarAccess.getAttributeMatchingConstraintAccess().getMatchingLiteralLEnumLiteralIDTerminalRuleCall_2_1_0_1()); }
			RULE_ID
			{ after(grammarAccess.getAttributeMatchingConstraintAccess().getMatchingLiteralLEnumLiteralIDTerminalRuleCall_2_1_0_1()); }
		)
		{ after(grammarAccess.getAttributeMatchingConstraintAccess().getMatchingLiteralLEnumLiteralCrossReference_2_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__KeyAndValue__KeyAssignment_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getKeyAndValueAccess().getKeySTRINGTerminalRuleCall_2_0()); }
		RULE_STRING
		{ after(grammarAccess.getKeyAndValueAccess().getKeySTRINGTerminalRuleCall_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__KeyAndValue__ValueAssignment_5
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getKeyAndValueAccess().getValueSTRINGTerminalRuleCall_5_0()); }
		RULE_STRING
		{ after(grammarAccess.getKeyAndValueAccess().getValueSTRINGTerminalRuleCall_5_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__Multiplicity__LowerAssignment_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getMultiplicityAccess().getLowerLowerBoundEnumRuleCall_1_0()); }
		ruleLowerBound
		{ after(grammarAccess.getMultiplicityAccess().getLowerLowerBoundEnumRuleCall_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__Multiplicity__UpperAssignment_2_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getMultiplicityAccess().getUpperUpperBoundEnumRuleCall_2_1_0()); }
		ruleUpperBound
		{ after(grammarAccess.getMultiplicityAccess().getUpperUpperBoundEnumRuleCall_2_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XImportDeclaration__StaticAssignment_2_0_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXImportDeclarationAccess().getStaticStaticKeyword_2_0_0_0()); }
		(
			{ before(grammarAccess.getXImportDeclarationAccess().getStaticStaticKeyword_2_0_0_0()); }
			'static'
			{ after(grammarAccess.getXImportDeclarationAccess().getStaticStaticKeyword_2_0_0_0()); }
		)
		{ after(grammarAccess.getXImportDeclarationAccess().getStaticStaticKeyword_2_0_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XImportDeclaration__ExtensionAssignment_2_0_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXImportDeclarationAccess().getExtensionExtensionKeyword_2_0_1_0()); }
		(
			{ before(grammarAccess.getXImportDeclarationAccess().getExtensionExtensionKeyword_2_0_1_0()); }
			'extension'
			{ after(grammarAccess.getXImportDeclarationAccess().getExtensionExtensionKeyword_2_0_1_0()); }
		)
		{ after(grammarAccess.getXImportDeclarationAccess().getExtensionExtensionKeyword_2_0_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XImportDeclaration__ImportedTypeAssignment_2_0_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXImportDeclarationAccess().getImportedTypeJvmDeclaredTypeCrossReference_2_0_2_0()); }
		(
			{ before(grammarAccess.getXImportDeclarationAccess().getImportedTypeJvmDeclaredTypeQualifiedNameInStaticImportParserRuleCall_2_0_2_0_1()); }
			ruleQualifiedNameInStaticImport
			{ after(grammarAccess.getXImportDeclarationAccess().getImportedTypeJvmDeclaredTypeQualifiedNameInStaticImportParserRuleCall_2_0_2_0_1()); }
		)
		{ after(grammarAccess.getXImportDeclarationAccess().getImportedTypeJvmDeclaredTypeCrossReference_2_0_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XImportDeclaration__WildcardAssignment_2_0_3_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXImportDeclarationAccess().getWildcardAsteriskKeyword_2_0_3_0_0()); }
		(
			{ before(grammarAccess.getXImportDeclarationAccess().getWildcardAsteriskKeyword_2_0_3_0_0()); }
			'*'
			{ after(grammarAccess.getXImportDeclarationAccess().getWildcardAsteriskKeyword_2_0_3_0_0()); }
		)
		{ after(grammarAccess.getXImportDeclarationAccess().getWildcardAsteriskKeyword_2_0_3_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XImportDeclaration__MemberNameAssignment_2_0_3_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXImportDeclarationAccess().getMemberNameValidIDParserRuleCall_2_0_3_1_0()); }
		ruleValidID
		{ after(grammarAccess.getXImportDeclarationAccess().getMemberNameValidIDParserRuleCall_2_0_3_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XImportDeclaration__ImportedTypeAssignment_2_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXImportDeclarationAccess().getImportedTypeJvmDeclaredTypeCrossReference_2_1_0()); }
		(
			{ before(grammarAccess.getXImportDeclarationAccess().getImportedTypeJvmDeclaredTypeQualifiedNameParserRuleCall_2_1_0_1()); }
			ruleQualifiedName
			{ after(grammarAccess.getXImportDeclarationAccess().getImportedTypeJvmDeclaredTypeQualifiedNameParserRuleCall_2_1_0_1()); }
		)
		{ after(grammarAccess.getXImportDeclarationAccess().getImportedTypeJvmDeclaredTypeCrossReference_2_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XImportDeclaration__ImportedNamespaceAssignment_2_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXImportDeclarationAccess().getImportedNamespaceQualifiedNameWithWildcardParserRuleCall_2_2_0()); }
		ruleQualifiedNameWithWildcard
		{ after(grammarAccess.getXImportDeclarationAccess().getImportedNamespaceQualifiedNameWithWildcardParserRuleCall_2_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XImportDeclaration__FqnImportAssignment_2_3_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXImportDeclarationAccess().getFqnImportNsKeyword_2_3_0_0()); }
		(
			{ before(grammarAccess.getXImportDeclarationAccess().getFqnImportNsKeyword_2_3_0_0()); }
			'ns'
			{ after(grammarAccess.getXImportDeclarationAccess().getFqnImportNsKeyword_2_3_0_0()); }
		)
		{ after(grammarAccess.getXImportDeclarationAccess().getFqnImportNsKeyword_2_3_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XImportDeclaration__ImportedFullyQualifiedNameAssignment_2_3_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXImportDeclarationAccess().getImportedFullyQualifiedNameQualifiedNameParserRuleCall_2_3_1_0()); }
		ruleQualifiedName
		{ after(grammarAccess.getXImportDeclarationAccess().getImportedFullyQualifiedNameQualifiedNameParserRuleCall_2_3_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotation__AnnotationTypeAssignment_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXAnnotationAccess().getAnnotationTypeJvmAnnotationTypeCrossReference_2_0()); }
		(
			{ before(grammarAccess.getXAnnotationAccess().getAnnotationTypeJvmAnnotationTypeQualifiedNameParserRuleCall_2_0_1()); }
			ruleQualifiedName
			{ after(grammarAccess.getXAnnotationAccess().getAnnotationTypeJvmAnnotationTypeQualifiedNameParserRuleCall_2_0_1()); }
		)
		{ after(grammarAccess.getXAnnotationAccess().getAnnotationTypeJvmAnnotationTypeCrossReference_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotation__ElementValuePairsAssignment_3_1_0_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXAnnotationAccess().getElementValuePairsXAnnotationElementValuePairParserRuleCall_3_1_0_0_0()); }
		ruleXAnnotationElementValuePair
		{ after(grammarAccess.getXAnnotationAccess().getElementValuePairsXAnnotationElementValuePairParserRuleCall_3_1_0_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotation__ElementValuePairsAssignment_3_1_0_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXAnnotationAccess().getElementValuePairsXAnnotationElementValuePairParserRuleCall_3_1_0_1_1_0()); }
		ruleXAnnotationElementValuePair
		{ after(grammarAccess.getXAnnotationAccess().getElementValuePairsXAnnotationElementValuePairParserRuleCall_3_1_0_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotation__ValueAssignment_3_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXAnnotationAccess().getValueXAnnotationElementValueOrCommaListParserRuleCall_3_1_1_0()); }
		ruleXAnnotationElementValueOrCommaList
		{ after(grammarAccess.getXAnnotationAccess().getValueXAnnotationElementValueOrCommaListParserRuleCall_3_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValuePair__ElementAssignment_0_0_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXAnnotationElementValuePairAccess().getElementJvmOperationCrossReference_0_0_0_0()); }
		(
			{ before(grammarAccess.getXAnnotationElementValuePairAccess().getElementJvmOperationValidIDParserRuleCall_0_0_0_0_1()); }
			ruleValidID
			{ after(grammarAccess.getXAnnotationElementValuePairAccess().getElementJvmOperationValidIDParserRuleCall_0_0_0_0_1()); }
		)
		{ after(grammarAccess.getXAnnotationElementValuePairAccess().getElementJvmOperationCrossReference_0_0_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValuePair__ValueAssignment_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXAnnotationElementValuePairAccess().getValueXAnnotationElementValueParserRuleCall_1_0()); }
		ruleXAnnotationElementValue
		{ after(grammarAccess.getXAnnotationElementValuePairAccess().getValueXAnnotationElementValueParserRuleCall_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValueOrCommaList__ElementsAssignment_0_1_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getElementsXAnnotationOrExpressionParserRuleCall_0_1_0_0()); }
		ruleXAnnotationOrExpression
		{ after(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getElementsXAnnotationOrExpressionParserRuleCall_0_1_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValueOrCommaList__ElementsAssignment_0_1_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getElementsXAnnotationOrExpressionParserRuleCall_0_1_1_1_0()); }
		ruleXAnnotationOrExpression
		{ after(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getElementsXAnnotationOrExpressionParserRuleCall_0_1_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValueOrCommaList__ElementsAssignment_1_1_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getElementsXAnnotationOrExpressionParserRuleCall_1_1_1_1_0()); }
		ruleXAnnotationOrExpression
		{ after(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getElementsXAnnotationOrExpressionParserRuleCall_1_1_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValue__ElementsAssignment_0_1_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXAnnotationElementValueAccess().getElementsXAnnotationOrExpressionParserRuleCall_0_1_0_0()); }
		ruleXAnnotationOrExpression
		{ after(grammarAccess.getXAnnotationElementValueAccess().getElementsXAnnotationOrExpressionParserRuleCall_0_1_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAnnotationElementValue__ElementsAssignment_0_1_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXAnnotationElementValueAccess().getElementsXAnnotationOrExpressionParserRuleCall_0_1_1_1_0()); }
		ruleXAnnotationOrExpression
		{ after(grammarAccess.getXAnnotationElementValueAccess().getElementsXAnnotationOrExpressionParserRuleCall_0_1_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAssignment__FeatureAssignment_0_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXAssignmentAccess().getFeatureJvmIdentifiableElementCrossReference_0_1_0()); }
		(
			{ before(grammarAccess.getXAssignmentAccess().getFeatureJvmIdentifiableElementFeatureCallIDParserRuleCall_0_1_0_1()); }
			ruleFeatureCallID
			{ after(grammarAccess.getXAssignmentAccess().getFeatureJvmIdentifiableElementFeatureCallIDParserRuleCall_0_1_0_1()); }
		)
		{ after(grammarAccess.getXAssignmentAccess().getFeatureJvmIdentifiableElementCrossReference_0_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAssignment__ValueAssignment_0_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXAssignmentAccess().getValueXAssignmentParserRuleCall_0_3_0()); }
		ruleXAssignment
		{ after(grammarAccess.getXAssignmentAccess().getValueXAssignmentParserRuleCall_0_3_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAssignment__FeatureAssignment_1_1_0_0_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXAssignmentAccess().getFeatureJvmIdentifiableElementCrossReference_1_1_0_0_1_0()); }
		(
			{ before(grammarAccess.getXAssignmentAccess().getFeatureJvmIdentifiableElementOpMultiAssignParserRuleCall_1_1_0_0_1_0_1()); }
			ruleOpMultiAssign
			{ after(grammarAccess.getXAssignmentAccess().getFeatureJvmIdentifiableElementOpMultiAssignParserRuleCall_1_1_0_0_1_0_1()); }
		)
		{ after(grammarAccess.getXAssignmentAccess().getFeatureJvmIdentifiableElementCrossReference_1_1_0_0_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAssignment__RightOperandAssignment_1_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXAssignmentAccess().getRightOperandXAssignmentParserRuleCall_1_1_1_0()); }
		ruleXAssignment
		{ after(grammarAccess.getXAssignmentAccess().getRightOperandXAssignmentParserRuleCall_1_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XOrExpression__FeatureAssignment_1_0_0_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXOrExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_1_0()); }
		(
			{ before(grammarAccess.getXOrExpressionAccess().getFeatureJvmIdentifiableElementOpOrParserRuleCall_1_0_0_1_0_1()); }
			ruleOpOr
			{ after(grammarAccess.getXOrExpressionAccess().getFeatureJvmIdentifiableElementOpOrParserRuleCall_1_0_0_1_0_1()); }
		)
		{ after(grammarAccess.getXOrExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XOrExpression__RightOperandAssignment_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXOrExpressionAccess().getRightOperandXAndExpressionParserRuleCall_1_1_0()); }
		ruleXAndExpression
		{ after(grammarAccess.getXOrExpressionAccess().getRightOperandXAndExpressionParserRuleCall_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAndExpression__FeatureAssignment_1_0_0_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXAndExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_1_0()); }
		(
			{ before(grammarAccess.getXAndExpressionAccess().getFeatureJvmIdentifiableElementOpAndParserRuleCall_1_0_0_1_0_1()); }
			ruleOpAnd
			{ after(grammarAccess.getXAndExpressionAccess().getFeatureJvmIdentifiableElementOpAndParserRuleCall_1_0_0_1_0_1()); }
		)
		{ after(grammarAccess.getXAndExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAndExpression__RightOperandAssignment_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXAndExpressionAccess().getRightOperandXEqualityExpressionParserRuleCall_1_1_0()); }
		ruleXEqualityExpression
		{ after(grammarAccess.getXAndExpressionAccess().getRightOperandXEqualityExpressionParserRuleCall_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XEqualityExpression__FeatureAssignment_1_0_0_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXEqualityExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_1_0()); }
		(
			{ before(grammarAccess.getXEqualityExpressionAccess().getFeatureJvmIdentifiableElementOpEqualityParserRuleCall_1_0_0_1_0_1()); }
			ruleOpEquality
			{ after(grammarAccess.getXEqualityExpressionAccess().getFeatureJvmIdentifiableElementOpEqualityParserRuleCall_1_0_0_1_0_1()); }
		)
		{ after(grammarAccess.getXEqualityExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XEqualityExpression__RightOperandAssignment_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXEqualityExpressionAccess().getRightOperandXRelationalExpressionParserRuleCall_1_1_0()); }
		ruleXRelationalExpression
		{ after(grammarAccess.getXEqualityExpressionAccess().getRightOperandXRelationalExpressionParserRuleCall_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XRelationalExpression__TypeAssignment_1_0_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXRelationalExpressionAccess().getTypeJvmTypeReferenceParserRuleCall_1_0_1_0()); }
		ruleJvmTypeReference
		{ after(grammarAccess.getXRelationalExpressionAccess().getTypeJvmTypeReferenceParserRuleCall_1_0_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XRelationalExpression__FeatureAssignment_1_1_0_0_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXRelationalExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_1_0_0_1_0()); }
		(
			{ before(grammarAccess.getXRelationalExpressionAccess().getFeatureJvmIdentifiableElementOpCompareParserRuleCall_1_1_0_0_1_0_1()); }
			ruleOpCompare
			{ after(grammarAccess.getXRelationalExpressionAccess().getFeatureJvmIdentifiableElementOpCompareParserRuleCall_1_1_0_0_1_0_1()); }
		)
		{ after(grammarAccess.getXRelationalExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_1_0_0_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XRelationalExpression__RightOperandAssignment_1_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXRelationalExpressionAccess().getRightOperandXOtherOperatorExpressionParserRuleCall_1_1_1_0()); }
		ruleXOtherOperatorExpression
		{ after(grammarAccess.getXRelationalExpressionAccess().getRightOperandXOtherOperatorExpressionParserRuleCall_1_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XOtherOperatorExpression__FeatureAssignment_1_0_0_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXOtherOperatorExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_1_0()); }
		(
			{ before(grammarAccess.getXOtherOperatorExpressionAccess().getFeatureJvmIdentifiableElementOpOtherParserRuleCall_1_0_0_1_0_1()); }
			ruleOpOther
			{ after(grammarAccess.getXOtherOperatorExpressionAccess().getFeatureJvmIdentifiableElementOpOtherParserRuleCall_1_0_0_1_0_1()); }
		)
		{ after(grammarAccess.getXOtherOperatorExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XOtherOperatorExpression__RightOperandAssignment_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXOtherOperatorExpressionAccess().getRightOperandXAdditiveExpressionParserRuleCall_1_1_0()); }
		ruleXAdditiveExpression
		{ after(grammarAccess.getXOtherOperatorExpressionAccess().getRightOperandXAdditiveExpressionParserRuleCall_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAdditiveExpression__FeatureAssignment_1_0_0_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXAdditiveExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_1_0()); }
		(
			{ before(grammarAccess.getXAdditiveExpressionAccess().getFeatureJvmIdentifiableElementOpAddParserRuleCall_1_0_0_1_0_1()); }
			ruleOpAdd
			{ after(grammarAccess.getXAdditiveExpressionAccess().getFeatureJvmIdentifiableElementOpAddParserRuleCall_1_0_0_1_0_1()); }
		)
		{ after(grammarAccess.getXAdditiveExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XAdditiveExpression__RightOperandAssignment_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXAdditiveExpressionAccess().getRightOperandXMultiplicativeExpressionParserRuleCall_1_1_0()); }
		ruleXMultiplicativeExpression
		{ after(grammarAccess.getXAdditiveExpressionAccess().getRightOperandXMultiplicativeExpressionParserRuleCall_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMultiplicativeExpression__FeatureAssignment_1_0_0_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXMultiplicativeExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_1_0()); }
		(
			{ before(grammarAccess.getXMultiplicativeExpressionAccess().getFeatureJvmIdentifiableElementOpMultiParserRuleCall_1_0_0_1_0_1()); }
			ruleOpMulti
			{ after(grammarAccess.getXMultiplicativeExpressionAccess().getFeatureJvmIdentifiableElementOpMultiParserRuleCall_1_0_0_1_0_1()); }
		)
		{ after(grammarAccess.getXMultiplicativeExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMultiplicativeExpression__RightOperandAssignment_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXMultiplicativeExpressionAccess().getRightOperandXUnaryOperationParserRuleCall_1_1_0()); }
		ruleXUnaryOperation
		{ after(grammarAccess.getXMultiplicativeExpressionAccess().getRightOperandXUnaryOperationParserRuleCall_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XUnaryOperation__FeatureAssignment_0_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXUnaryOperationAccess().getFeatureJvmIdentifiableElementCrossReference_0_1_0()); }
		(
			{ before(grammarAccess.getXUnaryOperationAccess().getFeatureJvmIdentifiableElementOpUnaryParserRuleCall_0_1_0_1()); }
			ruleOpUnary
			{ after(grammarAccess.getXUnaryOperationAccess().getFeatureJvmIdentifiableElementOpUnaryParserRuleCall_0_1_0_1()); }
		)
		{ after(grammarAccess.getXUnaryOperationAccess().getFeatureJvmIdentifiableElementCrossReference_0_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XUnaryOperation__OperandAssignment_0_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXUnaryOperationAccess().getOperandXUnaryOperationParserRuleCall_0_2_0()); }
		ruleXUnaryOperation
		{ after(grammarAccess.getXUnaryOperationAccess().getOperandXUnaryOperationParserRuleCall_0_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XCastedExpression__TypeAssignment_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXCastedExpressionAccess().getTypeJvmTypeReferenceParserRuleCall_1_1_0()); }
		ruleJvmTypeReference
		{ after(grammarAccess.getXCastedExpressionAccess().getTypeJvmTypeReferenceParserRuleCall_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XPostfixOperation__FeatureAssignment_1_0_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXPostfixOperationAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_1_0()); }
		(
			{ before(grammarAccess.getXPostfixOperationAccess().getFeatureJvmIdentifiableElementOpPostfixParserRuleCall_1_0_1_0_1()); }
			ruleOpPostfix
			{ after(grammarAccess.getXPostfixOperationAccess().getFeatureJvmIdentifiableElementOpPostfixParserRuleCall_1_0_1_0_1()); }
		)
		{ after(grammarAccess.getXPostfixOperationAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__ExplicitStaticAssignment_1_0_0_0_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXMemberFeatureCallAccess().getExplicitStaticColonColonKeyword_1_0_0_0_1_1_0()); }
		(
			{ before(grammarAccess.getXMemberFeatureCallAccess().getExplicitStaticColonColonKeyword_1_0_0_0_1_1_0()); }
			'::'
			{ after(grammarAccess.getXMemberFeatureCallAccess().getExplicitStaticColonColonKeyword_1_0_0_0_1_1_0()); }
		)
		{ after(grammarAccess.getXMemberFeatureCallAccess().getExplicitStaticColonColonKeyword_1_0_0_0_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__FeatureAssignment_1_0_0_0_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXMemberFeatureCallAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_0_2_0()); }
		(
			{ before(grammarAccess.getXMemberFeatureCallAccess().getFeatureJvmIdentifiableElementFeatureCallIDParserRuleCall_1_0_0_0_2_0_1()); }
			ruleFeatureCallID
			{ after(grammarAccess.getXMemberFeatureCallAccess().getFeatureJvmIdentifiableElementFeatureCallIDParserRuleCall_1_0_0_0_2_0_1()); }
		)
		{ after(grammarAccess.getXMemberFeatureCallAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_0_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__ValueAssignment_1_0_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXMemberFeatureCallAccess().getValueXAssignmentParserRuleCall_1_0_1_0()); }
		ruleXAssignment
		{ after(grammarAccess.getXMemberFeatureCallAccess().getValueXAssignmentParserRuleCall_1_0_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__NullSafeAssignment_1_1_0_0_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXMemberFeatureCallAccess().getNullSafeQuestionMarkFullStopKeyword_1_1_0_0_1_1_0()); }
		(
			{ before(grammarAccess.getXMemberFeatureCallAccess().getNullSafeQuestionMarkFullStopKeyword_1_1_0_0_1_1_0()); }
			'?.'
			{ after(grammarAccess.getXMemberFeatureCallAccess().getNullSafeQuestionMarkFullStopKeyword_1_1_0_0_1_1_0()); }
		)
		{ after(grammarAccess.getXMemberFeatureCallAccess().getNullSafeQuestionMarkFullStopKeyword_1_1_0_0_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__ExplicitStaticAssignment_1_1_0_0_1_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXMemberFeatureCallAccess().getExplicitStaticColonColonKeyword_1_1_0_0_1_2_0()); }
		(
			{ before(grammarAccess.getXMemberFeatureCallAccess().getExplicitStaticColonColonKeyword_1_1_0_0_1_2_0()); }
			'::'
			{ after(grammarAccess.getXMemberFeatureCallAccess().getExplicitStaticColonColonKeyword_1_1_0_0_1_2_0()); }
		)
		{ after(grammarAccess.getXMemberFeatureCallAccess().getExplicitStaticColonColonKeyword_1_1_0_0_1_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__TypeArgumentsAssignment_1_1_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXMemberFeatureCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_1_1_1_1_0()); }
		ruleJvmArgumentTypeReference
		{ after(grammarAccess.getXMemberFeatureCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_1_1_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__TypeArgumentsAssignment_1_1_1_2_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXMemberFeatureCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_1_1_1_2_1_0()); }
		ruleJvmArgumentTypeReference
		{ after(grammarAccess.getXMemberFeatureCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_1_1_1_2_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__FeatureAssignment_1_1_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXMemberFeatureCallAccess().getFeatureJvmIdentifiableElementCrossReference_1_1_2_0()); }
		(
			{ before(grammarAccess.getXMemberFeatureCallAccess().getFeatureJvmIdentifiableElementIdOrSuperParserRuleCall_1_1_2_0_1()); }
			ruleIdOrSuper
			{ after(grammarAccess.getXMemberFeatureCallAccess().getFeatureJvmIdentifiableElementIdOrSuperParserRuleCall_1_1_2_0_1()); }
		)
		{ after(grammarAccess.getXMemberFeatureCallAccess().getFeatureJvmIdentifiableElementCrossReference_1_1_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__ExplicitOperationCallAssignment_1_1_3_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXMemberFeatureCallAccess().getExplicitOperationCallLeftParenthesisKeyword_1_1_3_0_0()); }
		(
			{ before(grammarAccess.getXMemberFeatureCallAccess().getExplicitOperationCallLeftParenthesisKeyword_1_1_3_0_0()); }
			'('
			{ after(grammarAccess.getXMemberFeatureCallAccess().getExplicitOperationCallLeftParenthesisKeyword_1_1_3_0_0()); }
		)
		{ after(grammarAccess.getXMemberFeatureCallAccess().getExplicitOperationCallLeftParenthesisKeyword_1_1_3_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__MemberCallArgumentsAssignment_1_1_3_1_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsXShortClosureParserRuleCall_1_1_3_1_0_0()); }
		ruleXShortClosure
		{ after(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsXShortClosureParserRuleCall_1_1_3_1_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__MemberCallArgumentsAssignment_1_1_3_1_1_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsXExpressionParserRuleCall_1_1_3_1_1_0_0()); }
		ruleXExpression
		{ after(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsXExpressionParserRuleCall_1_1_3_1_1_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__MemberCallArgumentsAssignment_1_1_3_1_1_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsXExpressionParserRuleCall_1_1_3_1_1_1_1_0()); }
		ruleXExpression
		{ after(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsXExpressionParserRuleCall_1_1_3_1_1_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XMemberFeatureCall__MemberCallArgumentsAssignment_1_1_4
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsXClosureParserRuleCall_1_1_4_0()); }
		ruleXClosure
		{ after(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsXClosureParserRuleCall_1_1_4_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XSetLiteral__ElementsAssignment_3_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXSetLiteralAccess().getElementsXExpressionParserRuleCall_3_0_0()); }
		ruleXExpression
		{ after(grammarAccess.getXSetLiteralAccess().getElementsXExpressionParserRuleCall_3_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XSetLiteral__ElementsAssignment_3_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXSetLiteralAccess().getElementsXExpressionParserRuleCall_3_1_1_0()); }
		ruleXExpression
		{ after(grammarAccess.getXSetLiteralAccess().getElementsXExpressionParserRuleCall_3_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XListLiteral__ElementsAssignment_3_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXListLiteralAccess().getElementsXExpressionParserRuleCall_3_0_0()); }
		ruleXExpression
		{ after(grammarAccess.getXListLiteralAccess().getElementsXExpressionParserRuleCall_3_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XListLiteral__ElementsAssignment_3_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXListLiteralAccess().getElementsXExpressionParserRuleCall_3_1_1_0()); }
		ruleXExpression
		{ after(grammarAccess.getXListLiteralAccess().getElementsXExpressionParserRuleCall_3_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XClosure__DeclaredFormalParametersAssignment_1_0_0_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXClosureAccess().getDeclaredFormalParametersJvmFormalParameterParserRuleCall_1_0_0_0_0()); }
		ruleJvmFormalParameter
		{ after(grammarAccess.getXClosureAccess().getDeclaredFormalParametersJvmFormalParameterParserRuleCall_1_0_0_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XClosure__DeclaredFormalParametersAssignment_1_0_0_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXClosureAccess().getDeclaredFormalParametersJvmFormalParameterParserRuleCall_1_0_0_1_1_0()); }
		ruleJvmFormalParameter
		{ after(grammarAccess.getXClosureAccess().getDeclaredFormalParametersJvmFormalParameterParserRuleCall_1_0_0_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XClosure__ExplicitSyntaxAssignment_1_0_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXClosureAccess().getExplicitSyntaxVerticalLineKeyword_1_0_1_0()); }
		(
			{ before(grammarAccess.getXClosureAccess().getExplicitSyntaxVerticalLineKeyword_1_0_1_0()); }
			'|'
			{ after(grammarAccess.getXClosureAccess().getExplicitSyntaxVerticalLineKeyword_1_0_1_0()); }
		)
		{ after(grammarAccess.getXClosureAccess().getExplicitSyntaxVerticalLineKeyword_1_0_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XClosure__ExpressionAssignment_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXClosureAccess().getExpressionXExpressionInClosureParserRuleCall_2_0()); }
		ruleXExpressionInClosure
		{ after(grammarAccess.getXClosureAccess().getExpressionXExpressionInClosureParserRuleCall_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XExpressionInClosure__ExpressionsAssignment_1_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXExpressionInClosureAccess().getExpressionsXExpressionOrVarDeclarationParserRuleCall_1_0_0()); }
		ruleXExpressionOrVarDeclaration
		{ after(grammarAccess.getXExpressionInClosureAccess().getExpressionsXExpressionOrVarDeclarationParserRuleCall_1_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XShortClosure__DeclaredFormalParametersAssignment_0_0_1_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXShortClosureAccess().getDeclaredFormalParametersJvmFormalParameterParserRuleCall_0_0_1_0_0()); }
		ruleJvmFormalParameter
		{ after(grammarAccess.getXShortClosureAccess().getDeclaredFormalParametersJvmFormalParameterParserRuleCall_0_0_1_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XShortClosure__DeclaredFormalParametersAssignment_0_0_1_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXShortClosureAccess().getDeclaredFormalParametersJvmFormalParameterParserRuleCall_0_0_1_1_1_0()); }
		ruleJvmFormalParameter
		{ after(grammarAccess.getXShortClosureAccess().getDeclaredFormalParametersJvmFormalParameterParserRuleCall_0_0_1_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XShortClosure__ExplicitSyntaxAssignment_0_0_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXShortClosureAccess().getExplicitSyntaxVerticalLineKeyword_0_0_2_0()); }
		(
			{ before(grammarAccess.getXShortClosureAccess().getExplicitSyntaxVerticalLineKeyword_0_0_2_0()); }
			'|'
			{ after(grammarAccess.getXShortClosureAccess().getExplicitSyntaxVerticalLineKeyword_0_0_2_0()); }
		)
		{ after(grammarAccess.getXShortClosureAccess().getExplicitSyntaxVerticalLineKeyword_0_0_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XShortClosure__ExpressionAssignment_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXShortClosureAccess().getExpressionXExpressionParserRuleCall_1_0()); }
		ruleXExpression
		{ after(grammarAccess.getXShortClosureAccess().getExpressionXExpressionParserRuleCall_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XIfExpression__IfAssignment_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXIfExpressionAccess().getIfXExpressionParserRuleCall_3_0()); }
		ruleXExpression
		{ after(grammarAccess.getXIfExpressionAccess().getIfXExpressionParserRuleCall_3_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XIfExpression__ThenAssignment_5
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXIfExpressionAccess().getThenXExpressionParserRuleCall_5_0()); }
		ruleXExpression
		{ after(grammarAccess.getXIfExpressionAccess().getThenXExpressionParserRuleCall_5_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XIfExpression__ElseAssignment_6_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXIfExpressionAccess().getElseXExpressionParserRuleCall_6_1_0()); }
		ruleXExpression
		{ after(grammarAccess.getXIfExpressionAccess().getElseXExpressionParserRuleCall_6_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__DeclaredParamAssignment_2_0_0_0_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXSwitchExpressionAccess().getDeclaredParamJvmFormalParameterParserRuleCall_2_0_0_0_1_0()); }
		ruleJvmFormalParameter
		{ after(grammarAccess.getXSwitchExpressionAccess().getDeclaredParamJvmFormalParameterParserRuleCall_2_0_0_0_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__SwitchAssignment_2_0_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXSwitchExpressionAccess().getSwitchXExpressionParserRuleCall_2_0_1_0()); }
		ruleXExpression
		{ after(grammarAccess.getXSwitchExpressionAccess().getSwitchXExpressionParserRuleCall_2_0_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__DeclaredParamAssignment_2_1_0_0_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXSwitchExpressionAccess().getDeclaredParamJvmFormalParameterParserRuleCall_2_1_0_0_0_0()); }
		ruleJvmFormalParameter
		{ after(grammarAccess.getXSwitchExpressionAccess().getDeclaredParamJvmFormalParameterParserRuleCall_2_1_0_0_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__SwitchAssignment_2_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXSwitchExpressionAccess().getSwitchXExpressionParserRuleCall_2_1_1_0()); }
		ruleXExpression
		{ after(grammarAccess.getXSwitchExpressionAccess().getSwitchXExpressionParserRuleCall_2_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__CasesAssignment_4
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXSwitchExpressionAccess().getCasesXCasePartParserRuleCall_4_0()); }
		ruleXCasePart
		{ after(grammarAccess.getXSwitchExpressionAccess().getCasesXCasePartParserRuleCall_4_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XSwitchExpression__DefaultAssignment_5_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXSwitchExpressionAccess().getDefaultXExpressionParserRuleCall_5_2_0()); }
		ruleXExpression
		{ after(grammarAccess.getXSwitchExpressionAccess().getDefaultXExpressionParserRuleCall_5_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XCasePart__TypeGuardAssignment_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXCasePartAccess().getTypeGuardJvmTypeReferenceParserRuleCall_1_0()); }
		ruleJvmTypeReference
		{ after(grammarAccess.getXCasePartAccess().getTypeGuardJvmTypeReferenceParserRuleCall_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XCasePart__CaseAssignment_2_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXCasePartAccess().getCaseXExpressionParserRuleCall_2_1_0()); }
		ruleXExpression
		{ after(grammarAccess.getXCasePartAccess().getCaseXExpressionParserRuleCall_2_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XCasePart__ThenAssignment_3_0_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXCasePartAccess().getThenXExpressionParserRuleCall_3_0_1_0()); }
		ruleXExpression
		{ after(grammarAccess.getXCasePartAccess().getThenXExpressionParserRuleCall_3_0_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XCasePart__FallThroughAssignment_3_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXCasePartAccess().getFallThroughCommaKeyword_3_1_0()); }
		(
			{ before(grammarAccess.getXCasePartAccess().getFallThroughCommaKeyword_3_1_0()); }
			','
			{ after(grammarAccess.getXCasePartAccess().getFallThroughCommaKeyword_3_1_0()); }
		)
		{ after(grammarAccess.getXCasePartAccess().getFallThroughCommaKeyword_3_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XForLoopExpression__DeclaredParamAssignment_0_0_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXForLoopExpressionAccess().getDeclaredParamJvmFormalParameterParserRuleCall_0_0_3_0()); }
		ruleJvmFormalParameter
		{ after(grammarAccess.getXForLoopExpressionAccess().getDeclaredParamJvmFormalParameterParserRuleCall_0_0_3_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XForLoopExpression__ForExpressionAssignment_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXForLoopExpressionAccess().getForExpressionXExpressionParserRuleCall_1_0()); }
		ruleXExpression
		{ after(grammarAccess.getXForLoopExpressionAccess().getForExpressionXExpressionParserRuleCall_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XForLoopExpression__EachExpressionAssignment_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXForLoopExpressionAccess().getEachExpressionXExpressionParserRuleCall_3_0()); }
		ruleXExpression
		{ after(grammarAccess.getXForLoopExpressionAccess().getEachExpressionXExpressionParserRuleCall_3_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XBasicForLoopExpression__InitExpressionsAssignment_3_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXBasicForLoopExpressionAccess().getInitExpressionsXExpressionOrVarDeclarationParserRuleCall_3_0_0()); }
		ruleXExpressionOrVarDeclaration
		{ after(grammarAccess.getXBasicForLoopExpressionAccess().getInitExpressionsXExpressionOrVarDeclarationParserRuleCall_3_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XBasicForLoopExpression__InitExpressionsAssignment_3_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXBasicForLoopExpressionAccess().getInitExpressionsXExpressionOrVarDeclarationParserRuleCall_3_1_1_0()); }
		ruleXExpressionOrVarDeclaration
		{ after(grammarAccess.getXBasicForLoopExpressionAccess().getInitExpressionsXExpressionOrVarDeclarationParserRuleCall_3_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XBasicForLoopExpression__ExpressionAssignment_5
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXBasicForLoopExpressionAccess().getExpressionXExpressionParserRuleCall_5_0()); }
		ruleXExpression
		{ after(grammarAccess.getXBasicForLoopExpressionAccess().getExpressionXExpressionParserRuleCall_5_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XBasicForLoopExpression__UpdateExpressionsAssignment_7_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXBasicForLoopExpressionAccess().getUpdateExpressionsXExpressionParserRuleCall_7_0_0()); }
		ruleXExpression
		{ after(grammarAccess.getXBasicForLoopExpressionAccess().getUpdateExpressionsXExpressionParserRuleCall_7_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XBasicForLoopExpression__UpdateExpressionsAssignment_7_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXBasicForLoopExpressionAccess().getUpdateExpressionsXExpressionParserRuleCall_7_1_1_0()); }
		ruleXExpression
		{ after(grammarAccess.getXBasicForLoopExpressionAccess().getUpdateExpressionsXExpressionParserRuleCall_7_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XBasicForLoopExpression__EachExpressionAssignment_9
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXBasicForLoopExpressionAccess().getEachExpressionXExpressionParserRuleCall_9_0()); }
		ruleXExpression
		{ after(grammarAccess.getXBasicForLoopExpressionAccess().getEachExpressionXExpressionParserRuleCall_9_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XWhileExpression__PredicateAssignment_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXWhileExpressionAccess().getPredicateXExpressionParserRuleCall_3_0()); }
		ruleXExpression
		{ after(grammarAccess.getXWhileExpressionAccess().getPredicateXExpressionParserRuleCall_3_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XWhileExpression__BodyAssignment_5
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXWhileExpressionAccess().getBodyXExpressionParserRuleCall_5_0()); }
		ruleXExpression
		{ after(grammarAccess.getXWhileExpressionAccess().getBodyXExpressionParserRuleCall_5_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XDoWhileExpression__BodyAssignment_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXDoWhileExpressionAccess().getBodyXExpressionParserRuleCall_2_0()); }
		ruleXExpression
		{ after(grammarAccess.getXDoWhileExpressionAccess().getBodyXExpressionParserRuleCall_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XDoWhileExpression__PredicateAssignment_5
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXDoWhileExpressionAccess().getPredicateXExpressionParserRuleCall_5_0()); }
		ruleXExpression
		{ after(grammarAccess.getXDoWhileExpressionAccess().getPredicateXExpressionParserRuleCall_5_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XBlockExpression__ExpressionsAssignment_2_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXBlockExpressionAccess().getExpressionsXExpressionOrVarDeclarationParserRuleCall_2_0_0()); }
		ruleXExpressionOrVarDeclaration
		{ after(grammarAccess.getXBlockExpressionAccess().getExpressionsXExpressionOrVarDeclarationParserRuleCall_2_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XVariableDeclaration__WriteableAssignment_1_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXVariableDeclarationAccess().getWriteableVarKeyword_1_0_0()); }
		(
			{ before(grammarAccess.getXVariableDeclarationAccess().getWriteableVarKeyword_1_0_0()); }
			'var'
			{ after(grammarAccess.getXVariableDeclarationAccess().getWriteableVarKeyword_1_0_0()); }
		)
		{ after(grammarAccess.getXVariableDeclarationAccess().getWriteableVarKeyword_1_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XVariableDeclaration__TypeAssignment_2_0_0_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXVariableDeclarationAccess().getTypeJvmTypeReferenceParserRuleCall_2_0_0_0_0()); }
		ruleJvmTypeReference
		{ after(grammarAccess.getXVariableDeclarationAccess().getTypeJvmTypeReferenceParserRuleCall_2_0_0_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XVariableDeclaration__NameAssignment_2_0_0_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXVariableDeclarationAccess().getNameValidIDParserRuleCall_2_0_0_1_0()); }
		ruleValidID
		{ after(grammarAccess.getXVariableDeclarationAccess().getNameValidIDParserRuleCall_2_0_0_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XVariableDeclaration__NameAssignment_2_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXVariableDeclarationAccess().getNameValidIDParserRuleCall_2_1_0()); }
		ruleValidID
		{ after(grammarAccess.getXVariableDeclarationAccess().getNameValidIDParserRuleCall_2_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XVariableDeclaration__RightAssignment_3_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXVariableDeclarationAccess().getRightXExpressionParserRuleCall_3_1_0()); }
		ruleXExpression
		{ after(grammarAccess.getXVariableDeclarationAccess().getRightXExpressionParserRuleCall_3_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmFormalParameter__ParameterTypeAssignment_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getJvmFormalParameterAccess().getParameterTypeJvmTypeReferenceParserRuleCall_0_0()); }
		ruleJvmTypeReference
		{ after(grammarAccess.getJvmFormalParameterAccess().getParameterTypeJvmTypeReferenceParserRuleCall_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmFormalParameter__NameAssignment_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getJvmFormalParameterAccess().getNameValidIDParserRuleCall_1_0()); }
		ruleValidID
		{ after(grammarAccess.getJvmFormalParameterAccess().getNameValidIDParserRuleCall_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__FullJvmFormalParameter__ParameterTypeAssignment_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getFullJvmFormalParameterAccess().getParameterTypeJvmTypeReferenceParserRuleCall_0_0()); }
		ruleJvmTypeReference
		{ after(grammarAccess.getFullJvmFormalParameterAccess().getParameterTypeJvmTypeReferenceParserRuleCall_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__FullJvmFormalParameter__NameAssignment_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getFullJvmFormalParameterAccess().getNameValidIDParserRuleCall_1_0()); }
		ruleValidID
		{ after(grammarAccess.getFullJvmFormalParameterAccess().getNameValidIDParserRuleCall_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__TypeArgumentsAssignment_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXFeatureCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_1_1_0()); }
		ruleJvmArgumentTypeReference
		{ after(grammarAccess.getXFeatureCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__TypeArgumentsAssignment_1_2_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXFeatureCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_1_2_1_0()); }
		ruleJvmArgumentTypeReference
		{ after(grammarAccess.getXFeatureCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_1_2_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__FeatureAssignment_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXFeatureCallAccess().getFeatureJvmIdentifiableElementCrossReference_2_0()); }
		(
			{ before(grammarAccess.getXFeatureCallAccess().getFeatureJvmIdentifiableElementIdOrSuperParserRuleCall_2_0_1()); }
			ruleIdOrSuper
			{ after(grammarAccess.getXFeatureCallAccess().getFeatureJvmIdentifiableElementIdOrSuperParserRuleCall_2_0_1()); }
		)
		{ after(grammarAccess.getXFeatureCallAccess().getFeatureJvmIdentifiableElementCrossReference_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__ExplicitOperationCallAssignment_3_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXFeatureCallAccess().getExplicitOperationCallLeftParenthesisKeyword_3_0_0()); }
		(
			{ before(grammarAccess.getXFeatureCallAccess().getExplicitOperationCallLeftParenthesisKeyword_3_0_0()); }
			'('
			{ after(grammarAccess.getXFeatureCallAccess().getExplicitOperationCallLeftParenthesisKeyword_3_0_0()); }
		)
		{ after(grammarAccess.getXFeatureCallAccess().getExplicitOperationCallLeftParenthesisKeyword_3_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__FeatureCallArgumentsAssignment_3_1_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsXShortClosureParserRuleCall_3_1_0_0()); }
		ruleXShortClosure
		{ after(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsXShortClosureParserRuleCall_3_1_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__FeatureCallArgumentsAssignment_3_1_1_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsXExpressionParserRuleCall_3_1_1_0_0()); }
		ruleXExpression
		{ after(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsXExpressionParserRuleCall_3_1_1_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__FeatureCallArgumentsAssignment_3_1_1_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsXExpressionParserRuleCall_3_1_1_1_1_0()); }
		ruleXExpression
		{ after(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsXExpressionParserRuleCall_3_1_1_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XFeatureCall__FeatureCallArgumentsAssignment_4
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsXClosureParserRuleCall_4_0()); }
		ruleXClosure
		{ after(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsXClosureParserRuleCall_4_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__ConstructorAssignment_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXConstructorCallAccess().getConstructorJvmConstructorCrossReference_2_0()); }
		(
			{ before(grammarAccess.getXConstructorCallAccess().getConstructorJvmConstructorQualifiedNameParserRuleCall_2_0_1()); }
			ruleQualifiedName
			{ after(grammarAccess.getXConstructorCallAccess().getConstructorJvmConstructorQualifiedNameParserRuleCall_2_0_1()); }
		)
		{ after(grammarAccess.getXConstructorCallAccess().getConstructorJvmConstructorCrossReference_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__TypeArgumentsAssignment_3_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXConstructorCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_3_1_0()); }
		ruleJvmArgumentTypeReference
		{ after(grammarAccess.getXConstructorCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_3_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__TypeArgumentsAssignment_3_2_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXConstructorCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_3_2_1_0()); }
		ruleJvmArgumentTypeReference
		{ after(grammarAccess.getXConstructorCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_3_2_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__ExplicitConstructorCallAssignment_4_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXConstructorCallAccess().getExplicitConstructorCallLeftParenthesisKeyword_4_0_0()); }
		(
			{ before(grammarAccess.getXConstructorCallAccess().getExplicitConstructorCallLeftParenthesisKeyword_4_0_0()); }
			'('
			{ after(grammarAccess.getXConstructorCallAccess().getExplicitConstructorCallLeftParenthesisKeyword_4_0_0()); }
		)
		{ after(grammarAccess.getXConstructorCallAccess().getExplicitConstructorCallLeftParenthesisKeyword_4_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__ArgumentsAssignment_4_1_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXConstructorCallAccess().getArgumentsXShortClosureParserRuleCall_4_1_0_0()); }
		ruleXShortClosure
		{ after(grammarAccess.getXConstructorCallAccess().getArgumentsXShortClosureParserRuleCall_4_1_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__ArgumentsAssignment_4_1_1_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXConstructorCallAccess().getArgumentsXExpressionParserRuleCall_4_1_1_0_0()); }
		ruleXExpression
		{ after(grammarAccess.getXConstructorCallAccess().getArgumentsXExpressionParserRuleCall_4_1_1_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__ArgumentsAssignment_4_1_1_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXConstructorCallAccess().getArgumentsXExpressionParserRuleCall_4_1_1_1_1_0()); }
		ruleXExpression
		{ after(grammarAccess.getXConstructorCallAccess().getArgumentsXExpressionParserRuleCall_4_1_1_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XConstructorCall__ArgumentsAssignment_5
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXConstructorCallAccess().getArgumentsXClosureParserRuleCall_5_0()); }
		ruleXClosure
		{ after(grammarAccess.getXConstructorCallAccess().getArgumentsXClosureParserRuleCall_5_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XBooleanLiteral__IsTrueAssignment_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXBooleanLiteralAccess().getIsTrueTrueKeyword_1_1_0()); }
		(
			{ before(grammarAccess.getXBooleanLiteralAccess().getIsTrueTrueKeyword_1_1_0()); }
			'true'
			{ after(grammarAccess.getXBooleanLiteralAccess().getIsTrueTrueKeyword_1_1_0()); }
		)
		{ after(grammarAccess.getXBooleanLiteralAccess().getIsTrueTrueKeyword_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XNumberLiteral__ValueAssignment_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXNumberLiteralAccess().getValueNumberParserRuleCall_1_0()); }
		ruleNumber
		{ after(grammarAccess.getXNumberLiteralAccess().getValueNumberParserRuleCall_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XStringLiteral__ValueAssignment_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXStringLiteralAccess().getValueSTRINGTerminalRuleCall_1_0()); }
		RULE_STRING
		{ after(grammarAccess.getXStringLiteralAccess().getValueSTRINGTerminalRuleCall_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XTypeLiteral__TypeAssignment_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXTypeLiteralAccess().getTypeJvmTypeCrossReference_3_0()); }
		(
			{ before(grammarAccess.getXTypeLiteralAccess().getTypeJvmTypeQualifiedNameParserRuleCall_3_0_1()); }
			ruleQualifiedName
			{ after(grammarAccess.getXTypeLiteralAccess().getTypeJvmTypeQualifiedNameParserRuleCall_3_0_1()); }
		)
		{ after(grammarAccess.getXTypeLiteralAccess().getTypeJvmTypeCrossReference_3_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XTypeLiteral__ArrayDimensionsAssignment_4
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXTypeLiteralAccess().getArrayDimensionsArrayBracketsParserRuleCall_4_0()); }
		ruleArrayBrackets
		{ after(grammarAccess.getXTypeLiteralAccess().getArrayDimensionsArrayBracketsParserRuleCall_4_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XThrowExpression__ExpressionAssignment_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXThrowExpressionAccess().getExpressionXExpressionParserRuleCall_2_0()); }
		ruleXExpression
		{ after(grammarAccess.getXThrowExpressionAccess().getExpressionXExpressionParserRuleCall_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XReturnExpression__ExpressionAssignment_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXReturnExpressionAccess().getExpressionXExpressionParserRuleCall_2_0()); }
		ruleXExpression
		{ after(grammarAccess.getXReturnExpressionAccess().getExpressionXExpressionParserRuleCall_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XTryCatchFinallyExpression__ExpressionAssignment_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXTryCatchFinallyExpressionAccess().getExpressionXExpressionParserRuleCall_2_0()); }
		ruleXExpression
		{ after(grammarAccess.getXTryCatchFinallyExpressionAccess().getExpressionXExpressionParserRuleCall_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XTryCatchFinallyExpression__CatchClausesAssignment_3_0_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXTryCatchFinallyExpressionAccess().getCatchClausesXCatchClauseParserRuleCall_3_0_0_0()); }
		ruleXCatchClause
		{ after(grammarAccess.getXTryCatchFinallyExpressionAccess().getCatchClausesXCatchClauseParserRuleCall_3_0_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XTryCatchFinallyExpression__FinallyExpressionAssignment_3_0_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXTryCatchFinallyExpressionAccess().getFinallyExpressionXExpressionParserRuleCall_3_0_1_1_0()); }
		ruleXExpression
		{ after(grammarAccess.getXTryCatchFinallyExpressionAccess().getFinallyExpressionXExpressionParserRuleCall_3_0_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XTryCatchFinallyExpression__FinallyExpressionAssignment_3_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXTryCatchFinallyExpressionAccess().getFinallyExpressionXExpressionParserRuleCall_3_1_1_0()); }
		ruleXExpression
		{ after(grammarAccess.getXTryCatchFinallyExpressionAccess().getFinallyExpressionXExpressionParserRuleCall_3_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XSynchronizedExpression__ParamAssignment_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXSynchronizedExpressionAccess().getParamXExpressionParserRuleCall_1_0()); }
		ruleXExpression
		{ after(grammarAccess.getXSynchronizedExpressionAccess().getParamXExpressionParserRuleCall_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XSynchronizedExpression__ExpressionAssignment_3
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXSynchronizedExpressionAccess().getExpressionXExpressionParserRuleCall_3_0()); }
		ruleXExpression
		{ after(grammarAccess.getXSynchronizedExpressionAccess().getExpressionXExpressionParserRuleCall_3_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XCatchClause__DeclaredParamAssignment_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXCatchClauseAccess().getDeclaredParamFullJvmFormalParameterParserRuleCall_2_0()); }
		ruleFullJvmFormalParameter
		{ after(grammarAccess.getXCatchClauseAccess().getDeclaredParamFullJvmFormalParameterParserRuleCall_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XCatchClause__ExpressionAssignment_4
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXCatchClauseAccess().getExpressionXExpressionParserRuleCall_4_0()); }
		ruleXExpression
		{ after(grammarAccess.getXCatchClauseAccess().getExpressionXExpressionParserRuleCall_4_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XFunctionTypeRef__ParamTypesAssignment_0_1_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXFunctionTypeRefAccess().getParamTypesJvmTypeReferenceParserRuleCall_0_1_0_0()); }
		ruleJvmTypeReference
		{ after(grammarAccess.getXFunctionTypeRefAccess().getParamTypesJvmTypeReferenceParserRuleCall_0_1_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XFunctionTypeRef__ParamTypesAssignment_0_1_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXFunctionTypeRefAccess().getParamTypesJvmTypeReferenceParserRuleCall_0_1_1_1_0()); }
		ruleJvmTypeReference
		{ after(grammarAccess.getXFunctionTypeRefAccess().getParamTypesJvmTypeReferenceParserRuleCall_0_1_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XFunctionTypeRef__ReturnTypeAssignment_2
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXFunctionTypeRefAccess().getReturnTypeJvmTypeReferenceParserRuleCall_2_0()); }
		ruleJvmTypeReference
		{ after(grammarAccess.getXFunctionTypeRefAccess().getReturnTypeJvmTypeReferenceParserRuleCall_2_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__TypeAssignment_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getJvmParameterizedTypeReferenceAccess().getTypeJvmTypeCrossReference_0_0()); }
		(
			{ before(grammarAccess.getJvmParameterizedTypeReferenceAccess().getTypeJvmTypeQualifiedNameParserRuleCall_0_0_1()); }
			ruleQualifiedName
			{ after(grammarAccess.getJvmParameterizedTypeReferenceAccess().getTypeJvmTypeQualifiedNameParserRuleCall_0_0_1()); }
		)
		{ after(grammarAccess.getJvmParameterizedTypeReferenceAccess().getTypeJvmTypeCrossReference_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__ArgumentsAssignment_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsJvmArgumentTypeReferenceParserRuleCall_1_1_0()); }
		ruleJvmArgumentTypeReference
		{ after(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsJvmArgumentTypeReferenceParserRuleCall_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__ArgumentsAssignment_1_2_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsJvmArgumentTypeReferenceParserRuleCall_1_2_1_0()); }
		ruleJvmArgumentTypeReference
		{ after(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsJvmArgumentTypeReferenceParserRuleCall_1_2_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__TypeAssignment_1_4_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getJvmParameterizedTypeReferenceAccess().getTypeJvmTypeCrossReference_1_4_1_0()); }
		(
			{ before(grammarAccess.getJvmParameterizedTypeReferenceAccess().getTypeJvmTypeValidIDParserRuleCall_1_4_1_0_1()); }
			ruleValidID
			{ after(grammarAccess.getJvmParameterizedTypeReferenceAccess().getTypeJvmTypeValidIDParserRuleCall_1_4_1_0_1()); }
		)
		{ after(grammarAccess.getJvmParameterizedTypeReferenceAccess().getTypeJvmTypeCrossReference_1_4_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__ArgumentsAssignment_1_4_2_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsJvmArgumentTypeReferenceParserRuleCall_1_4_2_1_0()); }
		ruleJvmArgumentTypeReference
		{ after(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsJvmArgumentTypeReferenceParserRuleCall_1_4_2_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmParameterizedTypeReference__ArgumentsAssignment_1_4_2_2_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsJvmArgumentTypeReferenceParserRuleCall_1_4_2_2_1_0()); }
		ruleJvmArgumentTypeReference
		{ after(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsJvmArgumentTypeReferenceParserRuleCall_1_4_2_2_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmWildcardTypeReference__ConstraintsAssignment_2_0_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsJvmUpperBoundParserRuleCall_2_0_0_0()); }
		ruleJvmUpperBound
		{ after(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsJvmUpperBoundParserRuleCall_2_0_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmWildcardTypeReference__ConstraintsAssignment_2_0_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsJvmUpperBoundAndedParserRuleCall_2_0_1_0()); }
		ruleJvmUpperBoundAnded
		{ after(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsJvmUpperBoundAndedParserRuleCall_2_0_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmWildcardTypeReference__ConstraintsAssignment_2_1_0
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsJvmLowerBoundParserRuleCall_2_1_0_0()); }
		ruleJvmLowerBound
		{ after(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsJvmLowerBoundParserRuleCall_2_1_0_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmWildcardTypeReference__ConstraintsAssignment_2_1_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsJvmLowerBoundAndedParserRuleCall_2_1_1_0()); }
		ruleJvmLowerBoundAnded
		{ after(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsJvmLowerBoundAndedParserRuleCall_2_1_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmUpperBound__TypeReferenceAssignment_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getJvmUpperBoundAccess().getTypeReferenceJvmTypeReferenceParserRuleCall_1_0()); }
		ruleJvmTypeReference
		{ after(grammarAccess.getJvmUpperBoundAccess().getTypeReferenceJvmTypeReferenceParserRuleCall_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmUpperBoundAnded__TypeReferenceAssignment_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getJvmUpperBoundAndedAccess().getTypeReferenceJvmTypeReferenceParserRuleCall_1_0()); }
		ruleJvmTypeReference
		{ after(grammarAccess.getJvmUpperBoundAndedAccess().getTypeReferenceJvmTypeReferenceParserRuleCall_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmLowerBound__TypeReferenceAssignment_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getJvmLowerBoundAccess().getTypeReferenceJvmTypeReferenceParserRuleCall_1_0()); }
		ruleJvmTypeReference
		{ after(grammarAccess.getJvmLowerBoundAccess().getTypeReferenceJvmTypeReferenceParserRuleCall_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__JvmLowerBoundAnded__TypeReferenceAssignment_1
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getJvmLowerBoundAndedAccess().getTypeReferenceJvmTypeReferenceParserRuleCall_1_0()); }
		ruleJvmTypeReference
		{ after(grammarAccess.getJvmLowerBoundAndedAccess().getTypeReferenceJvmTypeReferenceParserRuleCall_1_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

rule__XImportSection__ImportDeclarationsAssignment
	@init {
		int stackSize = keepStackSize();
	}
:
	(
		{ before(grammarAccess.getXImportSectionAccess().getImportDeclarationsXImportDeclarationParserRuleCall_0()); }
		ruleXImportDeclaration
		{ after(grammarAccess.getXImportSectionAccess().getImportDeclarationsXImportDeclarationParserRuleCall_0()); }
	)
;
finally {
	restoreStackSize(stackSize);
}

RULE_HEX : ('0x'|'0X') ('0'..'9'|'a'..'f'|'A'..'F'|'_')+ ('#' (('b'|'B') ('i'|'I')|('l'|'L')))?;

RULE_INT : '0'..'9' ('0'..'9'|'_')*;

RULE_DECIMAL : RULE_INT (('e'|'E') ('+'|'-')? RULE_INT)? (('b'|'B') ('i'|'I'|'d'|'D')|('l'|'L'|'d'|'D'|'f'|'F'))?;

RULE_ID : '^'? ('a'..'z'|'A'..'Z'|'$'|'_') ('a'..'z'|'A'..'Z'|'$'|'_'|'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 : .;
