/*
 * generated by Xtext
 */
grammar InternalXcore;

options {
	superClass=AbstractInternalAntlrParser;
	
}

@lexer::header {
package org.eclipse.emf.ecore.xcore.parser.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.parser.antlr.Lexer;
}

@parser::header {
package org.eclipse.emf.ecore.xcore.parser.antlr.internal; 

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.AbstractInternalAntlrParser;
import org.eclipse.xtext.parser.antlr.XtextTokenStream;
import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
import org.eclipse.emf.ecore.xcore.services.XcoreGrammarAccess;

}

@parser::members {

 	private XcoreGrammarAccess grammarAccess;
 	
    public InternalXcoreParser(TokenStream input, XcoreGrammarAccess grammarAccess) {
        this(input);
        this.grammarAccess = grammarAccess;
        registerRules(grammarAccess.getGrammar());
    }
    
    @Override
    protected String getFirstRuleName() {
    	return "XPackage";	
   	}
   	
   	@Override
   	protected XcoreGrammarAccess getGrammarAccess() {
   		return grammarAccess;
   	}
}

@rulecatch { 
    catch (RecognitionException re) { 
        recover(input,re); 
        appendSkippedTokens();
    } 
}




// Entry rule entryRuleXPackage
entryRuleXPackage returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXPackageRule()); }
	 iv_ruleXPackage=ruleXPackage 
	 { $current=$iv_ruleXPackage.current; } 
	 EOF 
;

// Rule XPackage
ruleXPackage returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
    {
        $current = forceCreateModelElement(
            grammarAccess.getXPackageAccess().getXPackageAction_0(),
            $current);
    }
)(
(
		{ 
	        newCompositeNode(grammarAccess.getXPackageAccess().getAnnotationsXAnnotationParserRuleCall_1_0()); 
	    }
		lv_annotations_1_0=ruleXAnnotation		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXPackageRule());
	        }
       		add(
       			$current, 
       			"annotations",
        		lv_annotations_1_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XAnnotation");
	        afterParserOrEnumRuleCall();
	    }

)
)*	otherlv_2='package' 
    {
    	newLeafNode(otherlv_2, grammarAccess.getXPackageAccess().getPackageKeyword_2());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXPackageAccess().getNameQualifiedNameParserRuleCall_3_0()); 
	    }
		lv_name_3_0=ruleQualifiedName		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXPackageRule());
	        }
       		set(
       			$current, 
       			"name",
        		lv_name_3_0, 
        		"org.eclipse.xtext.xbase.Xbase.QualifiedName");
	        afterParserOrEnumRuleCall();
	    }

)
)(
(
		{ 
	        newCompositeNode(grammarAccess.getXPackageAccess().getImportDirectivesXImportDirectiveParserRuleCall_4_0()); 
	    }
		lv_importDirectives_4_0=ruleXImportDirective		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXPackageRule());
	        }
       		add(
       			$current, 
       			"importDirectives",
        		lv_importDirectives_4_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XImportDirective");
	        afterParserOrEnumRuleCall();
	    }

)
)*(((	'annotation' 
(
(
RULE_STRING

)
)))=>
(
		{ 
	        newCompositeNode(grammarAccess.getXPackageAccess().getAnnotationDirectivesXAnnotationDirectiveParserRuleCall_5_0()); 
	    }
		lv_annotationDirectives_5_0=ruleXAnnotationDirective		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXPackageRule());
	        }
       		add(
       			$current, 
       			"annotationDirectives",
        		lv_annotationDirectives_5_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XAnnotationDirective");
	        afterParserOrEnumRuleCall();
	    }

)
)*(
(
		{ 
	        newCompositeNode(grammarAccess.getXPackageAccess().getClassifiersXClassifierParserRuleCall_6_0()); 
	    }
		lv_classifiers_6_0=ruleXClassifier		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXPackageRule());
	        }
       		add(
       			$current, 
       			"classifiers",
        		lv_classifiers_6_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XClassifier");
	        afterParserOrEnumRuleCall();
	    }

)
)*)
;





// Entry rule entryRuleXAnnotation
entryRuleXAnnotation returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXAnnotationRule()); }
	 iv_ruleXAnnotation=ruleXAnnotation 
	 { $current=$iv_ruleXAnnotation.current; } 
	 EOF 
;

// Rule XAnnotation
ruleXAnnotation returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(	otherlv_0='@' 
    {
    	newLeafNode(otherlv_0, grammarAccess.getXAnnotationAccess().getCommercialAtKeyword_0());
    }
(
(
		{
			if ($current==null) {
	            $current = createModelElement(grammarAccess.getXAnnotationRule());
	        }
        }
		{ 
	        newCompositeNode(grammarAccess.getXAnnotationAccess().getSourceXAnnotationDirectiveCrossReference_1_0()); 
	    }
		ruleXQualifiedName		{ 
	        afterParserOrEnumRuleCall();
	    }

)
)(	otherlv_2='(' 
    {
    	newLeafNode(otherlv_2, grammarAccess.getXAnnotationAccess().getLeftParenthesisKeyword_2_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXAnnotationAccess().getDetailsXStringToStringMapEntryParserRuleCall_2_1_0()); 
	    }
		lv_details_3_0=ruleXStringToStringMapEntry		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXAnnotationRule());
	        }
       		add(
       			$current, 
       			"details",
        		lv_details_3_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XStringToStringMapEntry");
	        afterParserOrEnumRuleCall();
	    }

)
)(	otherlv_4=',' 
    {
    	newLeafNode(otherlv_4, grammarAccess.getXAnnotationAccess().getCommaKeyword_2_2_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXAnnotationAccess().getDetailsXStringToStringMapEntryParserRuleCall_2_2_1_0()); 
	    }
		lv_details_5_0=ruleXStringToStringMapEntry		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXAnnotationRule());
	        }
       		add(
       			$current, 
       			"details",
        		lv_details_5_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XStringToStringMapEntry");
	        afterParserOrEnumRuleCall();
	    }

)
))*	otherlv_6=')' 
    {
    	newLeafNode(otherlv_6, grammarAccess.getXAnnotationAccess().getRightParenthesisKeyword_2_3());
    }
)?)
;





// Entry rule entryRuleXStringToStringMapEntry
entryRuleXStringToStringMapEntry returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXStringToStringMapEntryRule()); }
	 iv_ruleXStringToStringMapEntry=ruleXStringToStringMapEntry 
	 { $current=$iv_ruleXStringToStringMapEntry.current; } 
	 EOF 
;

// Rule XStringToStringMapEntry
ruleXStringToStringMapEntry returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
(
		{ 
	        newCompositeNode(grammarAccess.getXStringToStringMapEntryAccess().getKeyQualifiedNameParserRuleCall_0_0()); 
	    }
		lv_key_0_0=ruleQualifiedName		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXStringToStringMapEntryRule());
	        }
       		set(
       			$current, 
       			"key",
        		lv_key_0_0, 
        		"org.eclipse.xtext.xbase.Xbase.QualifiedName");
	        afterParserOrEnumRuleCall();
	    }

)
)	otherlv_1='=' 
    {
    	newLeafNode(otherlv_1, grammarAccess.getXStringToStringMapEntryAccess().getEqualsSignKeyword_1());
    }
(
(
		lv_value_2_0=RULE_STRING
		{
			newLeafNode(lv_value_2_0, grammarAccess.getXStringToStringMapEntryAccess().getValueSTRINGTerminalRuleCall_2_0()); 
		}
		{
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXStringToStringMapEntryRule());
	        }
       		setWithLastConsumed(
       			$current, 
       			"value",
        		lv_value_2_0, 
        		"org.eclipse.xtext.xbase.Xtype.STRING");
	    }

)
))
;





// Entry rule entryRuleXImportDirective
entryRuleXImportDirective returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXImportDirectiveRule()); }
	 iv_ruleXImportDirective=ruleXImportDirective 
	 { $current=$iv_ruleXImportDirective.current; } 
	 EOF 
;

// Rule XImportDirective
ruleXImportDirective returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
    {
        $current = forceCreateModelElement(
            grammarAccess.getXImportDirectiveAccess().getXImportDirectiveAction_0(),
            $current);
    }
)	otherlv_1='import' 
    {
    	newLeafNode(otherlv_1, grammarAccess.getXImportDirectiveAccess().getImportKeyword_1());
    }
((
(
		{ 
	        newCompositeNode(grammarAccess.getXImportDirectiveAccess().getImportedNamespaceQualifiedNameWithWildcardParserRuleCall_2_0_0()); 
	    }
		lv_importedNamespace_2_0=ruleQualifiedNameWithWildcard		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXImportDirectiveRule());
	        }
       		set(
       			$current, 
       			"importedNamespace",
        		lv_importedNamespace_2_0, 
        		"org.eclipse.xtext.xbase.Xtype.QualifiedNameWithWildcard");
	        afterParserOrEnumRuleCall();
	    }

)
)
    |(
(
		{
			if ($current==null) {
	            $current = createModelElement(grammarAccess.getXImportDirectiveRule());
	        }
        }
		{ 
	        newCompositeNode(grammarAccess.getXImportDirectiveAccess().getImportedObjectEObjectCrossReference_2_1_0()); 
	    }
		ruleQualifiedName		{ 
	        afterParserOrEnumRuleCall();
	    }

)
)))
;





// Entry rule entryRuleXAnnotationDirective
entryRuleXAnnotationDirective returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXAnnotationDirectiveRule()); }
	 iv_ruleXAnnotationDirective=ruleXAnnotationDirective 
	 { $current=$iv_ruleXAnnotationDirective.current; } 
	 EOF 
;

// Rule XAnnotationDirective
ruleXAnnotationDirective returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((((	'annotation' 
(
(
RULE_STRING

)
)))=>(	otherlv_0='annotation' 
    {
    	newLeafNode(otherlv_0, grammarAccess.getXAnnotationDirectiveAccess().getAnnotationKeyword_0_0_0());
    }
(
(
		lv_sourceURI_1_0=RULE_STRING
		{
			newLeafNode(lv_sourceURI_1_0, grammarAccess.getXAnnotationDirectiveAccess().getSourceURISTRINGTerminalRuleCall_0_0_1_0()); 
		}
		{
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXAnnotationDirectiveRule());
	        }
       		setWithLastConsumed(
       			$current, 
       			"sourceURI",
        		lv_sourceURI_1_0, 
        		"org.eclipse.xtext.xbase.Xtype.STRING");
	    }

)
)))	otherlv_2='as' 
    {
    	newLeafNode(otherlv_2, grammarAccess.getXAnnotationDirectiveAccess().getAsKeyword_1());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXAnnotationDirectiveAccess().getNameValidIDParserRuleCall_2_0()); 
	    }
		lv_name_3_0=ruleValidID		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXAnnotationDirectiveRule());
	        }
       		set(
       			$current, 
       			"name",
        		lv_name_3_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.ValidID");
	        afterParserOrEnumRuleCall();
	    }

)
))
;





// Entry rule entryRuleXClassifier
entryRuleXClassifier returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXClassifierRule()); }
	 iv_ruleXClassifier=ruleXClassifier 
	 { $current=$iv_ruleXClassifier.current; } 
	 EOF 
;

// Rule XClassifier
ruleXClassifier returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(
    { 
        newCompositeNode(grammarAccess.getXClassifierAccess().getXClassParserRuleCall_0()); 
    }
    this_XClass_0=ruleXClass
    { 
        $current = $this_XClass_0.current; 
        afterParserOrEnumRuleCall();
    }

    |
    { 
        newCompositeNode(grammarAccess.getXClassifierAccess().getXDataTypeParserRuleCall_1()); 
    }
    this_XDataType_1=ruleXDataType
    { 
        $current = $this_XDataType_1.current; 
        afterParserOrEnumRuleCall();
    }

    |
    { 
        newCompositeNode(grammarAccess.getXClassifierAccess().getXEnumParserRuleCall_2()); 
    }
    this_XEnum_2=ruleXEnum
    { 
        $current = $this_XEnum_2.current; 
        afterParserOrEnumRuleCall();
    }
)
;





// Entry rule entryRuleXDataType
entryRuleXDataType returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXDataTypeRule()); }
	 iv_ruleXDataType=ruleXDataType 
	 { $current=$iv_ruleXDataType.current; } 
	 EOF 
;

// Rule XDataType
ruleXDataType returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
(
		{ 
	        newCompositeNode(grammarAccess.getXDataTypeAccess().getAnnotationsXAnnotationParserRuleCall_0_0()); 
	    }
		lv_annotations_0_0=ruleXAnnotation		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXDataTypeRule());
	        }
       		add(
       			$current, 
       			"annotations",
        		lv_annotations_0_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XAnnotation");
	        afterParserOrEnumRuleCall();
	    }

)
)*	otherlv_1='type' 
    {
    	newLeafNode(otherlv_1, grammarAccess.getXDataTypeAccess().getTypeKeyword_1());
    }
(
(
		lv_name_2_0=RULE_ID
		{
			newLeafNode(lv_name_2_0, grammarAccess.getXDataTypeAccess().getNameIDTerminalRuleCall_2_0()); 
		}
		{
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXDataTypeRule());
	        }
       		setWithLastConsumed(
       			$current, 
       			"name",
        		lv_name_2_0, 
        		"org.eclipse.xtext.xbase.Xtype.ID");
	    }

)
)(	otherlv_3='<' 
    {
    	newLeafNode(otherlv_3, grammarAccess.getXDataTypeAccess().getLessThanSignKeyword_3_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXDataTypeAccess().getTypeParametersXTypeParameterParserRuleCall_3_1_0()); 
	    }
		lv_typeParameters_4_0=ruleXTypeParameter		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXDataTypeRule());
	        }
       		add(
       			$current, 
       			"typeParameters",
        		lv_typeParameters_4_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XTypeParameter");
	        afterParserOrEnumRuleCall();
	    }

)
)(	otherlv_5=',' 
    {
    	newLeafNode(otherlv_5, grammarAccess.getXDataTypeAccess().getCommaKeyword_3_2_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXDataTypeAccess().getTypeParametersXTypeParameterParserRuleCall_3_2_1_0()); 
	    }
		lv_typeParameters_6_0=ruleXTypeParameter		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXDataTypeRule());
	        }
       		add(
       			$current, 
       			"typeParameters",
        		lv_typeParameters_6_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XTypeParameter");
	        afterParserOrEnumRuleCall();
	    }

)
))*	otherlv_7='>' 
    {
    	newLeafNode(otherlv_7, grammarAccess.getXDataTypeAccess().getGreaterThanSignKeyword_3_3());
    }
)?	otherlv_8='wraps' 
    {
    	newLeafNode(otherlv_8, grammarAccess.getXDataTypeAccess().getWrapsKeyword_4());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXDataTypeAccess().getInstanceTypeJvmTypeReferenceParserRuleCall_5_0()); 
	    }
		lv_instanceType_9_0=ruleJvmTypeReference		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXDataTypeRule());
	        }
       		set(
       			$current, 
       			"instanceType",
        		lv_instanceType_9_0, 
        		"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
	        afterParserOrEnumRuleCall();
	    }

)
)(

(
	{ 
	  getUnorderedGroupHelper().enter(grammarAccess.getXDataTypeAccess().getUnorderedGroup_6());
	}
	(
		(

			( 
				{getUnorderedGroupHelper().canSelect(grammarAccess.getXDataTypeAccess().getUnorderedGroup_6(), 0)}?=>(
					{ 
	 				  getUnorderedGroupHelper().select(grammarAccess.getXDataTypeAccess().getUnorderedGroup_6(), 0);
	 				}
					({true}?=>((
(
		lv_serializable_11_0=	'create' 
    {
        newLeafNode(lv_serializable_11_0, grammarAccess.getXDataTypeAccess().getSerializableCreateKeyword_6_0_0_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXDataTypeRule());
	        }
       		setWithLastConsumed($current, "serializable", true, "create");
	    }

)
)(
(
		{ 
	        newCompositeNode(grammarAccess.getXDataTypeAccess().getCreateBodyXBlockExpressionParserRuleCall_6_0_1_0()); 
	    }
		lv_createBody_12_0=ruleXBlockExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXDataTypeRule());
	        }
       		set(
       			$current, 
       			"createBody",
        		lv_createBody_12_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XBlockExpression");
	        afterParserOrEnumRuleCall();
	    }

)
)))
					{ 
	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXDataTypeAccess().getUnorderedGroup_6());
	 				}
 				)
			)  |

			( 
				{getUnorderedGroupHelper().canSelect(grammarAccess.getXDataTypeAccess().getUnorderedGroup_6(), 1)}?=>(
					{ 
	 				  getUnorderedGroupHelper().select(grammarAccess.getXDataTypeAccess().getUnorderedGroup_6(), 1);
	 				}
					({true}?=>(	otherlv_13='convert' 
    {
    	newLeafNode(otherlv_13, grammarAccess.getXDataTypeAccess().getConvertKeyword_6_1_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXDataTypeAccess().getConvertBodyXBlockExpressionParserRuleCall_6_1_1_0()); 
	    }
		lv_convertBody_14_0=ruleXBlockExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXDataTypeRule());
	        }
       		set(
       			$current, 
       			"convertBody",
        		lv_convertBody_14_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XBlockExpression");
	        afterParserOrEnumRuleCall();
	    }

)
)))
					{ 
	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXDataTypeAccess().getUnorderedGroup_6());
	 				}
 				)
			)  

		)*	
	)
)
	{ 
	  getUnorderedGroupHelper().leave(grammarAccess.getXDataTypeAccess().getUnorderedGroup_6());
	}

))
;





// Entry rule entryRuleXEnum
entryRuleXEnum returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXEnumRule()); }
	 iv_ruleXEnum=ruleXEnum 
	 { $current=$iv_ruleXEnum.current; } 
	 EOF 
;

// Rule XEnum
ruleXEnum returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
(
		{ 
	        newCompositeNode(grammarAccess.getXEnumAccess().getAnnotationsXAnnotationParserRuleCall_0_0()); 
	    }
		lv_annotations_0_0=ruleXAnnotation		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXEnumRule());
	        }
       		add(
       			$current, 
       			"annotations",
        		lv_annotations_0_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XAnnotation");
	        afterParserOrEnumRuleCall();
	    }

)
)*	otherlv_1='enum' 
    {
    	newLeafNode(otherlv_1, grammarAccess.getXEnumAccess().getEnumKeyword_1());
    }
(
(
		lv_name_2_0=RULE_ID
		{
			newLeafNode(lv_name_2_0, grammarAccess.getXEnumAccess().getNameIDTerminalRuleCall_2_0()); 
		}
		{
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXEnumRule());
	        }
       		setWithLastConsumed(
       			$current, 
       			"name",
        		lv_name_2_0, 
        		"org.eclipse.xtext.xbase.Xtype.ID");
	    }

)
)	otherlv_3='{' 
    {
    	newLeafNode(otherlv_3, grammarAccess.getXEnumAccess().getLeftCurlyBracketKeyword_3());
    }
((
(
		{ 
	        newCompositeNode(grammarAccess.getXEnumAccess().getLiteralsXEnumLiteralParserRuleCall_4_0_0()); 
	    }
		lv_literals_4_0=ruleXEnumLiteral		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXEnumRule());
	        }
       		add(
       			$current, 
       			"literals",
        		lv_literals_4_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XEnumLiteral");
	        afterParserOrEnumRuleCall();
	    }

)
)((	otherlv_5=',' 
    {
    	newLeafNode(otherlv_5, grammarAccess.getXEnumAccess().getCommaKeyword_4_1_0());
    }
)?(
(
		{ 
	        newCompositeNode(grammarAccess.getXEnumAccess().getLiteralsXEnumLiteralParserRuleCall_4_1_1_0()); 
	    }
		lv_literals_6_0=ruleXEnumLiteral		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXEnumRule());
	        }
       		add(
       			$current, 
       			"literals",
        		lv_literals_6_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XEnumLiteral");
	        afterParserOrEnumRuleCall();
	    }

)
))*)?	otherlv_7='}' 
    {
    	newLeafNode(otherlv_7, grammarAccess.getXEnumAccess().getRightCurlyBracketKeyword_5());
    }
)
;





// Entry rule entryRuleXEnumLiteral
entryRuleXEnumLiteral returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXEnumLiteralRule()); }
	 iv_ruleXEnumLiteral=ruleXEnumLiteral 
	 { $current=$iv_ruleXEnumLiteral.current; } 
	 EOF 
;

// Rule XEnumLiteral
ruleXEnumLiteral returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
(
		{ 
	        newCompositeNode(grammarAccess.getXEnumLiteralAccess().getAnnotationsXAnnotationParserRuleCall_0_0()); 
	    }
		lv_annotations_0_0=ruleXAnnotation		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXEnumLiteralRule());
	        }
       		add(
       			$current, 
       			"annotations",
        		lv_annotations_0_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XAnnotation");
	        afterParserOrEnumRuleCall();
	    }

)
)*(
(
		lv_name_1_0=RULE_ID
		{
			newLeafNode(lv_name_1_0, grammarAccess.getXEnumLiteralAccess().getNameIDTerminalRuleCall_1_0()); 
		}
		{
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXEnumLiteralRule());
	        }
       		setWithLastConsumed(
       			$current, 
       			"name",
        		lv_name_1_0, 
        		"org.eclipse.xtext.xbase.Xtype.ID");
	    }

)
)(	otherlv_2='as' 
    {
    	newLeafNode(otherlv_2, grammarAccess.getXEnumLiteralAccess().getAsKeyword_2_0());
    }
(
(
		lv_literal_3_0=RULE_STRING
		{
			newLeafNode(lv_literal_3_0, grammarAccess.getXEnumLiteralAccess().getLiteralSTRINGTerminalRuleCall_2_1_0()); 
		}
		{
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXEnumLiteralRule());
	        }
       		setWithLastConsumed(
       			$current, 
       			"literal",
        		lv_literal_3_0, 
        		"org.eclipse.xtext.xbase.Xtype.STRING");
	    }

)
))?(	otherlv_4='=' 
    {
    	newLeafNode(otherlv_4, grammarAccess.getXEnumLiteralAccess().getEqualsSignKeyword_3_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXEnumLiteralAccess().getValueSignedIntParserRuleCall_3_1_0()); 
	    }
		lv_value_5_0=ruleSignedInt		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXEnumLiteralRule());
	        }
       		set(
       			$current, 
       			"value",
        		lv_value_5_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.SignedInt");
	        afterParserOrEnumRuleCall();
	    }

)
))?)
;





// Entry rule entryRuleSignedInt
entryRuleSignedInt returns [String current=null] 
	:
	{ newCompositeNode(grammarAccess.getSignedIntRule()); } 
	 iv_ruleSignedInt=ruleSignedInt 
	 { $current=$iv_ruleSignedInt.current.getText(); }  
	 EOF 
;

// Rule SignedInt
ruleSignedInt returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
	kw='-' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getSignedIntAccess().getHyphenMinusKeyword_0()); 
    }
)?    this_INT_1=RULE_INT    {
		$current.merge(this_INT_1);
    }

    { 
    newLeafNode(this_INT_1, grammarAccess.getSignedIntAccess().getINTTerminalRuleCall_1()); 
    }
)
    ;





// Entry rule entryRuleXClass
entryRuleXClass returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXClassRule()); }
	 iv_ruleXClass=ruleXClass 
	 { $current=$iv_ruleXClass.current; } 
	 EOF 
;

// Rule XClass
ruleXClass returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
    {
        $current = forceCreateModelElement(
            grammarAccess.getXClassAccess().getXClassAction_0(),
            $current);
    }
)(
(
		{ 
	        newCompositeNode(grammarAccess.getXClassAccess().getAnnotationsXAnnotationParserRuleCall_1_0()); 
	    }
		lv_annotations_1_0=ruleXAnnotation		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXClassRule());
	        }
       		add(
       			$current, 
       			"annotations",
        		lv_annotations_1_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XAnnotation");
	        afterParserOrEnumRuleCall();
	    }

)
)*(((
(
		lv_abstract_2_0=	'abstract' 
    {
        newLeafNode(lv_abstract_2_0, grammarAccess.getXClassAccess().getAbstractAbstractKeyword_2_0_0_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXClassRule());
	        }
       		setWithLastConsumed($current, "abstract", true, "abstract");
	    }

)
)?	otherlv_3='class' 
    {
    	newLeafNode(otherlv_3, grammarAccess.getXClassAccess().getClassKeyword_2_0_1());
    }
)
    |(
(
		lv_interface_4_0=	'interface' 
    {
        newLeafNode(lv_interface_4_0, grammarAccess.getXClassAccess().getInterfaceInterfaceKeyword_2_1_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXClassRule());
	        }
       		setWithLastConsumed($current, "interface", true, "interface");
	    }

)
))(
(
		lv_name_5_0=RULE_ID
		{
			newLeafNode(lv_name_5_0, grammarAccess.getXClassAccess().getNameIDTerminalRuleCall_3_0()); 
		}
		{
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXClassRule());
	        }
       		setWithLastConsumed(
       			$current, 
       			"name",
        		lv_name_5_0, 
        		"org.eclipse.xtext.xbase.Xtype.ID");
	    }

)
)(	otherlv_6='<' 
    {
    	newLeafNode(otherlv_6, grammarAccess.getXClassAccess().getLessThanSignKeyword_4_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXClassAccess().getTypeParametersXTypeParameterParserRuleCall_4_1_0()); 
	    }
		lv_typeParameters_7_0=ruleXTypeParameter		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXClassRule());
	        }
       		add(
       			$current, 
       			"typeParameters",
        		lv_typeParameters_7_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XTypeParameter");
	        afterParserOrEnumRuleCall();
	    }

)
)(	otherlv_8=',' 
    {
    	newLeafNode(otherlv_8, grammarAccess.getXClassAccess().getCommaKeyword_4_2_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXClassAccess().getTypeParametersXTypeParameterParserRuleCall_4_2_1_0()); 
	    }
		lv_typeParameters_9_0=ruleXTypeParameter		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXClassRule());
	        }
       		add(
       			$current, 
       			"typeParameters",
        		lv_typeParameters_9_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XTypeParameter");
	        afterParserOrEnumRuleCall();
	    }

)
))*	otherlv_10='>' 
    {
    	newLeafNode(otherlv_10, grammarAccess.getXClassAccess().getGreaterThanSignKeyword_4_3());
    }
)?(	otherlv_11='extends' 
    {
    	newLeafNode(otherlv_11, grammarAccess.getXClassAccess().getExtendsKeyword_5_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXClassAccess().getSuperTypesXGenericTypeParserRuleCall_5_1_0()); 
	    }
		lv_superTypes_12_0=ruleXGenericType		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXClassRule());
	        }
       		add(
       			$current, 
       			"superTypes",
        		lv_superTypes_12_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XGenericType");
	        afterParserOrEnumRuleCall();
	    }

)
)(	otherlv_13=',' 
    {
    	newLeafNode(otherlv_13, grammarAccess.getXClassAccess().getCommaKeyword_5_2_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXClassAccess().getSuperTypesXGenericTypeParserRuleCall_5_2_1_0()); 
	    }
		lv_superTypes_14_0=ruleXGenericType		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXClassRule());
	        }
       		add(
       			$current, 
       			"superTypes",
        		lv_superTypes_14_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XGenericType");
	        afterParserOrEnumRuleCall();
	    }

)
))*)?(	otherlv_15='wraps' 
    {
    	newLeafNode(otherlv_15, grammarAccess.getXClassAccess().getWrapsKeyword_6_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXClassAccess().getInstanceTypeJvmTypeReferenceParserRuleCall_6_1_0()); 
	    }
		lv_instanceType_16_0=ruleJvmTypeReference		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXClassRule());
	        }
       		set(
       			$current, 
       			"instanceType",
        		lv_instanceType_16_0, 
        		"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
	        afterParserOrEnumRuleCall();
	    }

)
))?	otherlv_17='{' 
    {
    	newLeafNode(otherlv_17, grammarAccess.getXClassAccess().getLeftCurlyBracketKeyword_7());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXClassAccess().getMembersXMemberParserRuleCall_8_0()); 
	    }
		lv_members_18_0=ruleXMember		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXClassRule());
	        }
       		add(
       			$current, 
       			"members",
        		lv_members_18_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XMember");
	        afterParserOrEnumRuleCall();
	    }

)
)*	otherlv_19='}' 
    {
    	newLeafNode(otherlv_19, grammarAccess.getXClassAccess().getRightCurlyBracketKeyword_9());
    }
)
;





// Entry rule entryRuleXMember
entryRuleXMember returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXMemberRule()); }
	 iv_ruleXMember=ruleXMember 
	 { $current=$iv_ruleXMember.current; } 
	 EOF 
;

// Rule XMember
ruleXMember returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(
    { 
        newCompositeNode(grammarAccess.getXMemberAccess().getXOperationParserRuleCall_0()); 
    }
    this_XOperation_0=ruleXOperation
    { 
        $current = $this_XOperation_0.current; 
        afterParserOrEnumRuleCall();
    }

    |
    { 
        newCompositeNode(grammarAccess.getXMemberAccess().getXAttributeParserRuleCall_1()); 
    }
    this_XAttribute_1=ruleXAttribute
    { 
        $current = $this_XAttribute_1.current; 
        afterParserOrEnumRuleCall();
    }

    |
    { 
        newCompositeNode(grammarAccess.getXMemberAccess().getXReferenceParserRuleCall_2()); 
    }
    this_XReference_2=ruleXReference
    { 
        $current = $this_XReference_2.current; 
        afterParserOrEnumRuleCall();
    }
)
;





// Entry rule entryRuleXAttribute
entryRuleXAttribute returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXAttributeRule()); }
	 iv_ruleXAttribute=ruleXAttribute 
	 { $current=$iv_ruleXAttribute.current; } 
	 EOF 
;

// Rule XAttribute
ruleXAttribute returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
    {
        $current = forceCreateModelElement(
            grammarAccess.getXAttributeAccess().getXAttributeAction_0(),
            $current);
    }
)(
(
		{ 
	        newCompositeNode(grammarAccess.getXAttributeAccess().getAnnotationsXAnnotationParserRuleCall_1_0()); 
	    }
		lv_annotations_1_0=ruleXAnnotation		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXAttributeRule());
	        }
       		add(
       			$current, 
       			"annotations",
        		lv_annotations_1_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XAnnotation");
	        afterParserOrEnumRuleCall();
	    }

)
)*(

(
	{ 
	  getUnorderedGroupHelper().enter(grammarAccess.getXAttributeAccess().getUnorderedGroup_2());
	}
	(
		(

			( 
				{getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 0)}?=>(
					{ 
	 				  getUnorderedGroupHelper().select(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 0);
	 				}
					({true}?=>(
(
		lv_unordered_3_0=	'unordered' 
    {
        newLeafNode(lv_unordered_3_0, grammarAccess.getXAttributeAccess().getUnorderedUnorderedKeyword_2_0_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXAttributeRule());
	        }
       		setWithLastConsumed($current, "unordered", true, "unordered");
	    }

)
))
					{ 
	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXAttributeAccess().getUnorderedGroup_2());
	 				}
 				)
			)  |

			( 
				{getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 1)}?=>(
					{ 
	 				  getUnorderedGroupHelper().select(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 1);
	 				}
					({true}?=>(
(
		lv_unique_4_0=	'unique' 
    {
        newLeafNode(lv_unique_4_0, grammarAccess.getXAttributeAccess().getUniqueUniqueKeyword_2_1_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXAttributeRule());
	        }
       		setWithLastConsumed($current, "unique", true, "unique");
	    }

)
))
					{ 
	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXAttributeAccess().getUnorderedGroup_2());
	 				}
 				)
			)  |

			( 
				{getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 2)}?=>(
					{ 
	 				  getUnorderedGroupHelper().select(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 2);
	 				}
					({true}?=>(
(
		lv_readonly_5_0=	'readonly' 
    {
        newLeafNode(lv_readonly_5_0, grammarAccess.getXAttributeAccess().getReadonlyReadonlyKeyword_2_2_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXAttributeRule());
	        }
       		setWithLastConsumed($current, "readonly", true, "readonly");
	    }

)
))
					{ 
	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXAttributeAccess().getUnorderedGroup_2());
	 				}
 				)
			)  |

			( 
				{getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 3)}?=>(
					{ 
	 				  getUnorderedGroupHelper().select(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 3);
	 				}
					({true}?=>(
(
		lv_transient_6_0=	'transient' 
    {
        newLeafNode(lv_transient_6_0, grammarAccess.getXAttributeAccess().getTransientTransientKeyword_2_3_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXAttributeRule());
	        }
       		setWithLastConsumed($current, "transient", true, "transient");
	    }

)
))
					{ 
	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXAttributeAccess().getUnorderedGroup_2());
	 				}
 				)
			)  |

			( 
				{getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 4)}?=>(
					{ 
	 				  getUnorderedGroupHelper().select(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 4);
	 				}
					({true}?=>(
(
		lv_volatile_7_0=	'volatile' 
    {
        newLeafNode(lv_volatile_7_0, grammarAccess.getXAttributeAccess().getVolatileVolatileKeyword_2_4_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXAttributeRule());
	        }
       		setWithLastConsumed($current, "volatile", true, "volatile");
	    }

)
))
					{ 
	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXAttributeAccess().getUnorderedGroup_2());
	 				}
 				)
			)  |

			( 
				{getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 5)}?=>(
					{ 
	 				  getUnorderedGroupHelper().select(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 5);
	 				}
					({true}?=>(
(
		lv_unsettable_8_0=	'unsettable' 
    {
        newLeafNode(lv_unsettable_8_0, grammarAccess.getXAttributeAccess().getUnsettableUnsettableKeyword_2_5_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXAttributeRule());
	        }
       		setWithLastConsumed($current, "unsettable", true, "unsettable");
	    }

)
))
					{ 
	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXAttributeAccess().getUnorderedGroup_2());
	 				}
 				)
			)  |

			( 
				{getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 6)}?=>(
					{ 
	 				  getUnorderedGroupHelper().select(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 6);
	 				}
					({true}?=>(
(
		lv_derived_9_0=	'derived' 
    {
        newLeafNode(lv_derived_9_0, grammarAccess.getXAttributeAccess().getDerivedDerivedKeyword_2_6_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXAttributeRule());
	        }
       		setWithLastConsumed($current, "derived", true, "derived");
	    }

)
))
					{ 
	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXAttributeAccess().getUnorderedGroup_2());
	 				}
 				)
			)  |

			( 
				{getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 7)}?=>(
					{ 
	 				  getUnorderedGroupHelper().select(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 7);
	 				}
					({true}?=>(
(
		lv_iD_10_0=	'id' 
    {
        newLeafNode(lv_iD_10_0, grammarAccess.getXAttributeAccess().getIDIdKeyword_2_7_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXAttributeRule());
	        }
       		setWithLastConsumed($current, "iD", true, "id");
	    }

)
))
					{ 
	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXAttributeAccess().getUnorderedGroup_2());
	 				}
 				)
			)  

		)*	
	)
)
	{ 
	  getUnorderedGroupHelper().leave(grammarAccess.getXAttributeAccess().getUnorderedGroup_2());
	}

)(
(
		{ 
	        newCompositeNode(grammarAccess.getXAttributeAccess().getTypeXGenericTypeParserRuleCall_3_0()); 
	    }
		lv_type_11_0=ruleXGenericType		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXAttributeRule());
	        }
       		set(
       			$current, 
       			"type",
        		lv_type_11_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XGenericType");
	        afterParserOrEnumRuleCall();
	    }

)
)(
(
		{ 
	        newCompositeNode(grammarAccess.getXAttributeAccess().getMultiplicityXMultiplicityParserRuleCall_4_0()); 
	    }
		lv_multiplicity_12_0=ruleXMultiplicity		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXAttributeRule());
	        }
       		set(
       			$current, 
       			"multiplicity",
        		lv_multiplicity_12_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XMultiplicity");
	        afterParserOrEnumRuleCall();
	    }

)
)?(
(
		lv_name_13_0=RULE_ID
		{
			newLeafNode(lv_name_13_0, grammarAccess.getXAttributeAccess().getNameIDTerminalRuleCall_5_0()); 
		}
		{
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXAttributeRule());
	        }
       		setWithLastConsumed(
       			$current, 
       			"name",
        		lv_name_13_0, 
        		"org.eclipse.xtext.xbase.Xtype.ID");
	    }

)
)(	otherlv_14='=' 
    {
    	newLeafNode(otherlv_14, grammarAccess.getXAttributeAccess().getEqualsSignKeyword_6_0());
    }
(
(
		lv_defaultValueLiteral_15_0=RULE_STRING
		{
			newLeafNode(lv_defaultValueLiteral_15_0, grammarAccess.getXAttributeAccess().getDefaultValueLiteralSTRINGTerminalRuleCall_6_1_0()); 
		}
		{
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXAttributeRule());
	        }
       		setWithLastConsumed(
       			$current, 
       			"defaultValueLiteral",
        		lv_defaultValueLiteral_15_0, 
        		"org.eclipse.xtext.xbase.Xtype.STRING");
	    }

)
))?(

(
	{ 
	  getUnorderedGroupHelper().enter(grammarAccess.getXAttributeAccess().getUnorderedGroup_7());
	}
	(
		(

			( 
				{getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_7(), 0)}?=>(
					{ 
	 				  getUnorderedGroupHelper().select(grammarAccess.getXAttributeAccess().getUnorderedGroup_7(), 0);
	 				}
					({true}?=>(	otherlv_17='get' 
    {
    	newLeafNode(otherlv_17, grammarAccess.getXAttributeAccess().getGetKeyword_7_0_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXAttributeAccess().getGetBodyXBlockExpressionParserRuleCall_7_0_1_0()); 
	    }
		lv_getBody_18_0=ruleXBlockExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXAttributeRule());
	        }
       		set(
       			$current, 
       			"getBody",
        		lv_getBody_18_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XBlockExpression");
	        afterParserOrEnumRuleCall();
	    }

)
)))
					{ 
	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXAttributeAccess().getUnorderedGroup_7());
	 				}
 				)
			)  |

			( 
				{getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_7(), 1)}?=>(
					{ 
	 				  getUnorderedGroupHelper().select(grammarAccess.getXAttributeAccess().getUnorderedGroup_7(), 1);
	 				}
					({true}?=>(	otherlv_19='set' 
    {
    	newLeafNode(otherlv_19, grammarAccess.getXAttributeAccess().getSetKeyword_7_1_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXAttributeAccess().getSetBodyXBlockExpressionParserRuleCall_7_1_1_0()); 
	    }
		lv_setBody_20_0=ruleXBlockExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXAttributeRule());
	        }
       		set(
       			$current, 
       			"setBody",
        		lv_setBody_20_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XBlockExpression");
	        afterParserOrEnumRuleCall();
	    }

)
)))
					{ 
	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXAttributeAccess().getUnorderedGroup_7());
	 				}
 				)
			)  |

			( 
				{getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_7(), 2)}?=>(
					{ 
	 				  getUnorderedGroupHelper().select(grammarAccess.getXAttributeAccess().getUnorderedGroup_7(), 2);
	 				}
					({true}?=>(	otherlv_21='isSet' 
    {
    	newLeafNode(otherlv_21, grammarAccess.getXAttributeAccess().getIsSetKeyword_7_2_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXAttributeAccess().getIsSetBodyXBlockExpressionParserRuleCall_7_2_1_0()); 
	    }
		lv_isSetBody_22_0=ruleXBlockExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXAttributeRule());
	        }
       		set(
       			$current, 
       			"isSetBody",
        		lv_isSetBody_22_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XBlockExpression");
	        afterParserOrEnumRuleCall();
	    }

)
)))
					{ 
	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXAttributeAccess().getUnorderedGroup_7());
	 				}
 				)
			)  |

			( 
				{getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_7(), 3)}?=>(
					{ 
	 				  getUnorderedGroupHelper().select(grammarAccess.getXAttributeAccess().getUnorderedGroup_7(), 3);
	 				}
					({true}?=>(	otherlv_23='unset' 
    {
    	newLeafNode(otherlv_23, grammarAccess.getXAttributeAccess().getUnsetKeyword_7_3_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXAttributeAccess().getUnsetBodyXBlockExpressionParserRuleCall_7_3_1_0()); 
	    }
		lv_unsetBody_24_0=ruleXBlockExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXAttributeRule());
	        }
       		set(
       			$current, 
       			"unsetBody",
        		lv_unsetBody_24_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XBlockExpression");
	        afterParserOrEnumRuleCall();
	    }

)
)))
					{ 
	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXAttributeAccess().getUnorderedGroup_7());
	 				}
 				)
			)  

		)*	
	)
)
	{ 
	  getUnorderedGroupHelper().leave(grammarAccess.getXAttributeAccess().getUnorderedGroup_7());
	}

))
;





// Entry rule entryRuleXReference
entryRuleXReference returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXReferenceRule()); }
	 iv_ruleXReference=ruleXReference 
	 { $current=$iv_ruleXReference.current; } 
	 EOF 
;

// Rule XReference
ruleXReference returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
    {
        $current = forceCreateModelElement(
            grammarAccess.getXReferenceAccess().getXReferenceAction_0(),
            $current);
    }
)(
(
		{ 
	        newCompositeNode(grammarAccess.getXReferenceAccess().getAnnotationsXAnnotationParserRuleCall_1_0()); 
	    }
		lv_annotations_1_0=ruleXAnnotation		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXReferenceRule());
	        }
       		add(
       			$current, 
       			"annotations",
        		lv_annotations_1_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XAnnotation");
	        afterParserOrEnumRuleCall();
	    }

)
)*(((
(
		lv_containment_2_0=	'contains' 
    {
        newLeafNode(lv_containment_2_0, grammarAccess.getXReferenceAccess().getContainmentContainsKeyword_2_0_0_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXReferenceRule());
	        }
       		setWithLastConsumed($current, "containment", true, "contains");
	    }

)
)(
(
		lv_resolveProxies_3_0=	'resolving' 
    {
        newLeafNode(lv_resolveProxies_3_0, grammarAccess.getXReferenceAccess().getResolveProxiesResolvingKeyword_2_0_1_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXReferenceRule());
	        }
       		setWithLastConsumed($current, "resolveProxies", true, "resolving");
	    }

)
)?)
    |((
(
		lv_resolveProxies_4_0=	'resolving' 
    {
        newLeafNode(lv_resolveProxies_4_0, grammarAccess.getXReferenceAccess().getResolveProxiesResolvingKeyword_2_1_0_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXReferenceRule());
	        }
       		setWithLastConsumed($current, "resolveProxies", true, "resolving");
	    }

)
)(
(
		lv_containment_5_0=	'contains' 
    {
        newLeafNode(lv_containment_5_0, grammarAccess.getXReferenceAccess().getContainmentContainsKeyword_2_1_1_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXReferenceRule());
	        }
       		setWithLastConsumed($current, "containment", true, "contains");
	    }

)
))
    |((
(
		lv_container_6_0=	'container' 
    {
        newLeafNode(lv_container_6_0, grammarAccess.getXReferenceAccess().getContainerContainerKeyword_2_2_0_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXReferenceRule());
	        }
       		setWithLastConsumed($current, "container", true, "container");
	    }

)
)(
(
		lv_resolveProxies_7_0=	'resolving' 
    {
        newLeafNode(lv_resolveProxies_7_0, grammarAccess.getXReferenceAccess().getResolveProxiesResolvingKeyword_2_2_1_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXReferenceRule());
	        }
       		setWithLastConsumed($current, "resolveProxies", true, "resolving");
	    }

)
)?)
    |((
(
		lv_resolveProxies_8_0=	'resolving' 
    {
        newLeafNode(lv_resolveProxies_8_0, grammarAccess.getXReferenceAccess().getResolveProxiesResolvingKeyword_2_3_0_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXReferenceRule());
	        }
       		setWithLastConsumed($current, "resolveProxies", true, "resolving");
	    }

)
)(
(
		lv_container_9_0=	'container' 
    {
        newLeafNode(lv_container_9_0, grammarAccess.getXReferenceAccess().getContainerContainerKeyword_2_3_1_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXReferenceRule());
	        }
       		setWithLastConsumed($current, "container", true, "container");
	    }

)
))
    |(	otherlv_10='refers' 
    {
    	newLeafNode(otherlv_10, grammarAccess.getXReferenceAccess().getRefersKeyword_2_4_0());
    }
(
(
		lv_local_11_0=	'local' 
    {
        newLeafNode(lv_local_11_0, grammarAccess.getXReferenceAccess().getLocalLocalKeyword_2_4_1_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXReferenceRule());
	        }
       		setWithLastConsumed($current, "local", true, "local");
	    }

)
)?)
    |((
(
		lv_local_12_0=	'local' 
    {
        newLeafNode(lv_local_12_0, grammarAccess.getXReferenceAccess().getLocalLocalKeyword_2_5_0_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXReferenceRule());
	        }
       		setWithLastConsumed($current, "local", true, "local");
	    }

)
)	otherlv_13='refers' 
    {
    	newLeafNode(otherlv_13, grammarAccess.getXReferenceAccess().getRefersKeyword_2_5_1());
    }
))(

(
	{ 
	  getUnorderedGroupHelper().enter(grammarAccess.getXReferenceAccess().getUnorderedGroup_3());
	}
	(
		(

			( 
				{getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 0)}?=>(
					{ 
	 				  getUnorderedGroupHelper().select(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 0);
	 				}
					({true}?=>(
(
		lv_unordered_15_0=	'unordered' 
    {
        newLeafNode(lv_unordered_15_0, grammarAccess.getXReferenceAccess().getUnorderedUnorderedKeyword_3_0_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXReferenceRule());
	        }
       		setWithLastConsumed($current, "unordered", true, "unordered");
	    }

)
))
					{ 
	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXReferenceAccess().getUnorderedGroup_3());
	 				}
 				)
			)  |

			( 
				{getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 1)}?=>(
					{ 
	 				  getUnorderedGroupHelper().select(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 1);
	 				}
					({true}?=>(
(
		lv_unique_16_0=	'unique' 
    {
        newLeafNode(lv_unique_16_0, grammarAccess.getXReferenceAccess().getUniqueUniqueKeyword_3_1_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXReferenceRule());
	        }
       		setWithLastConsumed($current, "unique", true, "unique");
	    }

)
))
					{ 
	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXReferenceAccess().getUnorderedGroup_3());
	 				}
 				)
			)  |

			( 
				{getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 2)}?=>(
					{ 
	 				  getUnorderedGroupHelper().select(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 2);
	 				}
					({true}?=>(
(
		lv_readonly_17_0=	'readonly' 
    {
        newLeafNode(lv_readonly_17_0, grammarAccess.getXReferenceAccess().getReadonlyReadonlyKeyword_3_2_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXReferenceRule());
	        }
       		setWithLastConsumed($current, "readonly", true, "readonly");
	    }

)
))
					{ 
	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXReferenceAccess().getUnorderedGroup_3());
	 				}
 				)
			)  |

			( 
				{getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 3)}?=>(
					{ 
	 				  getUnorderedGroupHelper().select(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 3);
	 				}
					({true}?=>(
(
		lv_transient_18_0=	'transient' 
    {
        newLeafNode(lv_transient_18_0, grammarAccess.getXReferenceAccess().getTransientTransientKeyword_3_3_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXReferenceRule());
	        }
       		setWithLastConsumed($current, "transient", true, "transient");
	    }

)
))
					{ 
	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXReferenceAccess().getUnorderedGroup_3());
	 				}
 				)
			)  |

			( 
				{getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 4)}?=>(
					{ 
	 				  getUnorderedGroupHelper().select(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 4);
	 				}
					({true}?=>(
(
		lv_volatile_19_0=	'volatile' 
    {
        newLeafNode(lv_volatile_19_0, grammarAccess.getXReferenceAccess().getVolatileVolatileKeyword_3_4_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXReferenceRule());
	        }
       		setWithLastConsumed($current, "volatile", true, "volatile");
	    }

)
))
					{ 
	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXReferenceAccess().getUnorderedGroup_3());
	 				}
 				)
			)  |

			( 
				{getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 5)}?=>(
					{ 
	 				  getUnorderedGroupHelper().select(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 5);
	 				}
					({true}?=>(
(
		lv_unsettable_20_0=	'unsettable' 
    {
        newLeafNode(lv_unsettable_20_0, grammarAccess.getXReferenceAccess().getUnsettableUnsettableKeyword_3_5_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXReferenceRule());
	        }
       		setWithLastConsumed($current, "unsettable", true, "unsettable");
	    }

)
))
					{ 
	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXReferenceAccess().getUnorderedGroup_3());
	 				}
 				)
			)  |

			( 
				{getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 6)}?=>(
					{ 
	 				  getUnorderedGroupHelper().select(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 6);
	 				}
					({true}?=>(
(
		lv_derived_21_0=	'derived' 
    {
        newLeafNode(lv_derived_21_0, grammarAccess.getXReferenceAccess().getDerivedDerivedKeyword_3_6_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXReferenceRule());
	        }
       		setWithLastConsumed($current, "derived", true, "derived");
	    }

)
))
					{ 
	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXReferenceAccess().getUnorderedGroup_3());
	 				}
 				)
			)  

		)*	
	)
)
	{ 
	  getUnorderedGroupHelper().leave(grammarAccess.getXReferenceAccess().getUnorderedGroup_3());
	}

)(
(
		{ 
	        newCompositeNode(grammarAccess.getXReferenceAccess().getTypeXGenericTypeParserRuleCall_4_0()); 
	    }
		lv_type_22_0=ruleXGenericType		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXReferenceRule());
	        }
       		set(
       			$current, 
       			"type",
        		lv_type_22_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XGenericType");
	        afterParserOrEnumRuleCall();
	    }

)
)(
(
		{ 
	        newCompositeNode(grammarAccess.getXReferenceAccess().getMultiplicityXMultiplicityParserRuleCall_5_0()); 
	    }
		lv_multiplicity_23_0=ruleXMultiplicity		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXReferenceRule());
	        }
       		set(
       			$current, 
       			"multiplicity",
        		lv_multiplicity_23_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XMultiplicity");
	        afterParserOrEnumRuleCall();
	    }

)
)?(
(
		lv_name_24_0=RULE_ID
		{
			newLeafNode(lv_name_24_0, grammarAccess.getXReferenceAccess().getNameIDTerminalRuleCall_6_0()); 
		}
		{
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXReferenceRule());
	        }
       		setWithLastConsumed(
       			$current, 
       			"name",
        		lv_name_24_0, 
        		"org.eclipse.xtext.xbase.Xtype.ID");
	    }

)
)(	otherlv_25='opposite' 
    {
    	newLeafNode(otherlv_25, grammarAccess.getXReferenceAccess().getOppositeKeyword_7_0());
    }
(
(
		{
			if ($current==null) {
	            $current = createModelElement(grammarAccess.getXReferenceRule());
	        }
        }
		{ 
	        newCompositeNode(grammarAccess.getXReferenceAccess().getOppositeGenFeatureCrossReference_7_1_0()); 
	    }
		ruleValidID		{ 
	        afterParserOrEnumRuleCall();
	    }

)
))?(	otherlv_27='keys' 
    {
    	newLeafNode(otherlv_27, grammarAccess.getXReferenceAccess().getKeysKeyword_8_0());
    }
(
(
		{
			if ($current==null) {
	            $current = createModelElement(grammarAccess.getXReferenceRule());
	        }
        }
		{ 
	        newCompositeNode(grammarAccess.getXReferenceAccess().getKeysGenFeatureCrossReference_8_1_0()); 
	    }
		ruleValidID		{ 
	        afterParserOrEnumRuleCall();
	    }

)
)(	otherlv_29=',' 
    {
    	newLeafNode(otherlv_29, grammarAccess.getXReferenceAccess().getCommaKeyword_8_2_0());
    }
(
(
		{
			if ($current==null) {
	            $current = createModelElement(grammarAccess.getXReferenceRule());
	        }
        }
		{ 
	        newCompositeNode(grammarAccess.getXReferenceAccess().getKeysGenFeatureCrossReference_8_2_1_0()); 
	    }
		ruleValidID		{ 
	        afterParserOrEnumRuleCall();
	    }

)
))*)?(

(
	{ 
	  getUnorderedGroupHelper().enter(grammarAccess.getXReferenceAccess().getUnorderedGroup_9());
	}
	(
		(

			( 
				{getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_9(), 0)}?=>(
					{ 
	 				  getUnorderedGroupHelper().select(grammarAccess.getXReferenceAccess().getUnorderedGroup_9(), 0);
	 				}
					({true}?=>(	otherlv_32='get' 
    {
    	newLeafNode(otherlv_32, grammarAccess.getXReferenceAccess().getGetKeyword_9_0_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXReferenceAccess().getGetBodyXBlockExpressionParserRuleCall_9_0_1_0()); 
	    }
		lv_getBody_33_0=ruleXBlockExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXReferenceRule());
	        }
       		set(
       			$current, 
       			"getBody",
        		lv_getBody_33_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XBlockExpression");
	        afterParserOrEnumRuleCall();
	    }

)
)))
					{ 
	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXReferenceAccess().getUnorderedGroup_9());
	 				}
 				)
			)  |

			( 
				{getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_9(), 1)}?=>(
					{ 
	 				  getUnorderedGroupHelper().select(grammarAccess.getXReferenceAccess().getUnorderedGroup_9(), 1);
	 				}
					({true}?=>(	otherlv_34='set' 
    {
    	newLeafNode(otherlv_34, grammarAccess.getXReferenceAccess().getSetKeyword_9_1_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXReferenceAccess().getSetBodyXBlockExpressionParserRuleCall_9_1_1_0()); 
	    }
		lv_setBody_35_0=ruleXBlockExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXReferenceRule());
	        }
       		set(
       			$current, 
       			"setBody",
        		lv_setBody_35_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XBlockExpression");
	        afterParserOrEnumRuleCall();
	    }

)
)))
					{ 
	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXReferenceAccess().getUnorderedGroup_9());
	 				}
 				)
			)  |

			( 
				{getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_9(), 2)}?=>(
					{ 
	 				  getUnorderedGroupHelper().select(grammarAccess.getXReferenceAccess().getUnorderedGroup_9(), 2);
	 				}
					({true}?=>(	otherlv_36='isSet' 
    {
    	newLeafNode(otherlv_36, grammarAccess.getXReferenceAccess().getIsSetKeyword_9_2_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXReferenceAccess().getIsSetBodyXBlockExpressionParserRuleCall_9_2_1_0()); 
	    }
		lv_isSetBody_37_0=ruleXBlockExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXReferenceRule());
	        }
       		set(
       			$current, 
       			"isSetBody",
        		lv_isSetBody_37_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XBlockExpression");
	        afterParserOrEnumRuleCall();
	    }

)
)))
					{ 
	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXReferenceAccess().getUnorderedGroup_9());
	 				}
 				)
			)  |

			( 
				{getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_9(), 3)}?=>(
					{ 
	 				  getUnorderedGroupHelper().select(grammarAccess.getXReferenceAccess().getUnorderedGroup_9(), 3);
	 				}
					({true}?=>(	otherlv_38='unset' 
    {
    	newLeafNode(otherlv_38, grammarAccess.getXReferenceAccess().getUnsetKeyword_9_3_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXReferenceAccess().getUnsetBodyXBlockExpressionParserRuleCall_9_3_1_0()); 
	    }
		lv_unsetBody_39_0=ruleXBlockExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXReferenceRule());
	        }
       		set(
       			$current, 
       			"unsetBody",
        		lv_unsetBody_39_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XBlockExpression");
	        afterParserOrEnumRuleCall();
	    }

)
)))
					{ 
	 				  getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXReferenceAccess().getUnorderedGroup_9());
	 				}
 				)
			)  

		)*	
	)
)
	{ 
	  getUnorderedGroupHelper().leave(grammarAccess.getXReferenceAccess().getUnorderedGroup_9());
	}

))
;





// Entry rule entryRuleXOperation
entryRuleXOperation returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXOperationRule()); }
	 iv_ruleXOperation=ruleXOperation 
	 { $current=$iv_ruleXOperation.current; } 
	 EOF 
;

// Rule XOperation
ruleXOperation returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
    {
        $current = forceCreateModelElement(
            grammarAccess.getXOperationAccess().getXOperationAction_0(),
            $current);
    }
)(
(
		{ 
	        newCompositeNode(grammarAccess.getXOperationAccess().getAnnotationsXAnnotationParserRuleCall_1_0()); 
	    }
		lv_annotations_1_0=ruleXAnnotation		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXOperationRule());
	        }
       		add(
       			$current, 
       			"annotations",
        		lv_annotations_1_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XAnnotation");
	        afterParserOrEnumRuleCall();
	    }

)
)*	otherlv_2='op' 
    {
    	newLeafNode(otherlv_2, grammarAccess.getXOperationAccess().getOpKeyword_2());
    }
(((
(
		lv_unordered_3_0=	'unordered' 
    {
        newLeafNode(lv_unordered_3_0, grammarAccess.getXOperationAccess().getUnorderedUnorderedKeyword_3_0_0_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXOperationRule());
	        }
       		setWithLastConsumed($current, "unordered", true, "unordered");
	    }

)
)(
(
		lv_unique_4_0=	'unique' 
    {
        newLeafNode(lv_unique_4_0, grammarAccess.getXOperationAccess().getUniqueUniqueKeyword_3_0_1_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXOperationRule());
	        }
       		setWithLastConsumed($current, "unique", true, "unique");
	    }

)
)?)
    |((
(
		lv_unique_5_0=	'unique' 
    {
        newLeafNode(lv_unique_5_0, grammarAccess.getXOperationAccess().getUniqueUniqueKeyword_3_1_0_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXOperationRule());
	        }
       		setWithLastConsumed($current, "unique", true, "unique");
	    }

)
)(
(
		lv_unordered_6_0=	'unordered' 
    {
        newLeafNode(lv_unordered_6_0, grammarAccess.getXOperationAccess().getUnorderedUnorderedKeyword_3_1_1_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXOperationRule());
	        }
       		setWithLastConsumed($current, "unordered", true, "unordered");
	    }

)
)?))?(	otherlv_7='<' 
    {
    	newLeafNode(otherlv_7, grammarAccess.getXOperationAccess().getLessThanSignKeyword_4_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXOperationAccess().getTypeParametersXTypeParameterParserRuleCall_4_1_0()); 
	    }
		lv_typeParameters_8_0=ruleXTypeParameter		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXOperationRule());
	        }
       		add(
       			$current, 
       			"typeParameters",
        		lv_typeParameters_8_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XTypeParameter");
	        afterParserOrEnumRuleCall();
	    }

)
)(	otherlv_9=',' 
    {
    	newLeafNode(otherlv_9, grammarAccess.getXOperationAccess().getCommaKeyword_4_2_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXOperationAccess().getTypeParametersXTypeParameterParserRuleCall_4_2_1_0()); 
	    }
		lv_typeParameters_10_0=ruleXTypeParameter		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXOperationRule());
	        }
       		add(
       			$current, 
       			"typeParameters",
        		lv_typeParameters_10_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XTypeParameter");
	        afterParserOrEnumRuleCall();
	    }

)
))*	otherlv_11='>' 
    {
    	newLeafNode(otherlv_11, grammarAccess.getXOperationAccess().getGreaterThanSignKeyword_4_3());
    }
)?((
(
		{ 
	        newCompositeNode(grammarAccess.getXOperationAccess().getTypeXGenericTypeParserRuleCall_5_0_0()); 
	    }
		lv_type_12_0=ruleXGenericType		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXOperationRule());
	        }
       		set(
       			$current, 
       			"type",
        		lv_type_12_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XGenericType");
	        afterParserOrEnumRuleCall();
	    }

)
)
    |	otherlv_13='void' 
    {
    	newLeafNode(otherlv_13, grammarAccess.getXOperationAccess().getVoidKeyword_5_1());
    }
)(
(
		{ 
	        newCompositeNode(grammarAccess.getXOperationAccess().getMultiplicityXMultiplicityParserRuleCall_6_0()); 
	    }
		lv_multiplicity_14_0=ruleXMultiplicity		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXOperationRule());
	        }
       		set(
       			$current, 
       			"multiplicity",
        		lv_multiplicity_14_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XMultiplicity");
	        afterParserOrEnumRuleCall();
	    }

)
)?(
(
		lv_name_15_0=RULE_ID
		{
			newLeafNode(lv_name_15_0, grammarAccess.getXOperationAccess().getNameIDTerminalRuleCall_7_0()); 
		}
		{
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXOperationRule());
	        }
       		setWithLastConsumed(
       			$current, 
       			"name",
        		lv_name_15_0, 
        		"org.eclipse.xtext.xbase.Xtype.ID");
	    }

)
)	otherlv_16='(' 
    {
    	newLeafNode(otherlv_16, grammarAccess.getXOperationAccess().getLeftParenthesisKeyword_8());
    }
((
(
		{ 
	        newCompositeNode(grammarAccess.getXOperationAccess().getParametersXParameterParserRuleCall_9_0_0()); 
	    }
		lv_parameters_17_0=ruleXParameter		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXOperationRule());
	        }
       		add(
       			$current, 
       			"parameters",
        		lv_parameters_17_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XParameter");
	        afterParserOrEnumRuleCall();
	    }

)
)(	otherlv_18=',' 
    {
    	newLeafNode(otherlv_18, grammarAccess.getXOperationAccess().getCommaKeyword_9_1_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXOperationAccess().getParametersXParameterParserRuleCall_9_1_1_0()); 
	    }
		lv_parameters_19_0=ruleXParameter		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXOperationRule());
	        }
       		add(
       			$current, 
       			"parameters",
        		lv_parameters_19_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XParameter");
	        afterParserOrEnumRuleCall();
	    }

)
))*)?	otherlv_20=')' 
    {
    	newLeafNode(otherlv_20, grammarAccess.getXOperationAccess().getRightParenthesisKeyword_10());
    }
(	otherlv_21='throws' 
    {
    	newLeafNode(otherlv_21, grammarAccess.getXOperationAccess().getThrowsKeyword_11_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXOperationAccess().getExceptionsXGenericTypeParserRuleCall_11_1_0()); 
	    }
		lv_exceptions_22_0=ruleXGenericType		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXOperationRule());
	        }
       		add(
       			$current, 
       			"exceptions",
        		lv_exceptions_22_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XGenericType");
	        afterParserOrEnumRuleCall();
	    }

)
)(	otherlv_23=',' 
    {
    	newLeafNode(otherlv_23, grammarAccess.getXOperationAccess().getCommaKeyword_11_2_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXOperationAccess().getExceptionsXGenericTypeParserRuleCall_11_2_1_0()); 
	    }
		lv_exceptions_24_0=ruleXGenericType		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXOperationRule());
	        }
       		add(
       			$current, 
       			"exceptions",
        		lv_exceptions_24_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XGenericType");
	        afterParserOrEnumRuleCall();
	    }

)
))*)?(
(
		{ 
	        newCompositeNode(grammarAccess.getXOperationAccess().getBodyXBlockExpressionParserRuleCall_12_0()); 
	    }
		lv_body_25_0=ruleXBlockExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXOperationRule());
	        }
       		set(
       			$current, 
       			"body",
        		lv_body_25_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XBlockExpression");
	        afterParserOrEnumRuleCall();
	    }

)
)?)
;





// Entry rule entryRuleXParameter
entryRuleXParameter returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXParameterRule()); }
	 iv_ruleXParameter=ruleXParameter 
	 { $current=$iv_ruleXParameter.current; } 
	 EOF 
;

// Rule XParameter
ruleXParameter returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
(
		{ 
	        newCompositeNode(grammarAccess.getXParameterAccess().getAnnotationsXAnnotationParserRuleCall_0_0()); 
	    }
		lv_annotations_0_0=ruleXAnnotation		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXParameterRule());
	        }
       		add(
       			$current, 
       			"annotations",
        		lv_annotations_0_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XAnnotation");
	        afterParserOrEnumRuleCall();
	    }

)
)*(((
(
		lv_unordered_1_0=	'unordered' 
    {
        newLeafNode(lv_unordered_1_0, grammarAccess.getXParameterAccess().getUnorderedUnorderedKeyword_1_0_0_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXParameterRule());
	        }
       		setWithLastConsumed($current, "unordered", true, "unordered");
	    }

)
)(
(
		lv_unique_2_0=	'unique' 
    {
        newLeafNode(lv_unique_2_0, grammarAccess.getXParameterAccess().getUniqueUniqueKeyword_1_0_1_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXParameterRule());
	        }
       		setWithLastConsumed($current, "unique", true, "unique");
	    }

)
)?)
    |((
(
		lv_unique_3_0=	'unique' 
    {
        newLeafNode(lv_unique_3_0, grammarAccess.getXParameterAccess().getUniqueUniqueKeyword_1_1_0_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXParameterRule());
	        }
       		setWithLastConsumed($current, "unique", true, "unique");
	    }

)
)(
(
		lv_unordered_4_0=	'unordered' 
    {
        newLeafNode(lv_unordered_4_0, grammarAccess.getXParameterAccess().getUnorderedUnorderedKeyword_1_1_1_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXParameterRule());
	        }
       		setWithLastConsumed($current, "unordered", true, "unordered");
	    }

)
)?))?(
(
		{ 
	        newCompositeNode(grammarAccess.getXParameterAccess().getTypeXGenericTypeParserRuleCall_2_0()); 
	    }
		lv_type_5_0=ruleXGenericType		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXParameterRule());
	        }
       		set(
       			$current, 
       			"type",
        		lv_type_5_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XGenericType");
	        afterParserOrEnumRuleCall();
	    }

)
)(
(
		{ 
	        newCompositeNode(grammarAccess.getXParameterAccess().getMultiplicityXMultiplicityParserRuleCall_3_0()); 
	    }
		lv_multiplicity_6_0=ruleXMultiplicity		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXParameterRule());
	        }
       		set(
       			$current, 
       			"multiplicity",
        		lv_multiplicity_6_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XMultiplicity");
	        afterParserOrEnumRuleCall();
	    }

)
)?(
(
		lv_name_7_0=RULE_ID
		{
			newLeafNode(lv_name_7_0, grammarAccess.getXParameterAccess().getNameIDTerminalRuleCall_4_0()); 
		}
		{
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXParameterRule());
	        }
       		setWithLastConsumed(
       			$current, 
       			"name",
        		lv_name_7_0, 
        		"org.eclipse.xtext.xbase.Xtype.ID");
	    }

)
))
;





// Entry rule entryRuleXTypeParameter
entryRuleXTypeParameter returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXTypeParameterRule()); }
	 iv_ruleXTypeParameter=ruleXTypeParameter 
	 { $current=$iv_ruleXTypeParameter.current; } 
	 EOF 
;

// Rule XTypeParameter
ruleXTypeParameter returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
(
		{ 
	        newCompositeNode(grammarAccess.getXTypeParameterAccess().getAnnotationsXAnnotationParserRuleCall_0_0()); 
	    }
		lv_annotations_0_0=ruleXAnnotation		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXTypeParameterRule());
	        }
       		add(
       			$current, 
       			"annotations",
        		lv_annotations_0_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XAnnotation");
	        afterParserOrEnumRuleCall();
	    }

)
)*(
(
		lv_name_1_0=RULE_ID
		{
			newLeafNode(lv_name_1_0, grammarAccess.getXTypeParameterAccess().getNameIDTerminalRuleCall_1_0()); 
		}
		{
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXTypeParameterRule());
	        }
       		setWithLastConsumed(
       			$current, 
       			"name",
        		lv_name_1_0, 
        		"org.eclipse.xtext.xbase.Xtype.ID");
	    }

)
)(	otherlv_2='extends' 
    {
    	newLeafNode(otherlv_2, grammarAccess.getXTypeParameterAccess().getExtendsKeyword_2_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXTypeParameterAccess().getBoundsXGenericTypeParserRuleCall_2_1_0()); 
	    }
		lv_bounds_3_0=ruleXGenericType		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXTypeParameterRule());
	        }
       		add(
       			$current, 
       			"bounds",
        		lv_bounds_3_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XGenericType");
	        afterParserOrEnumRuleCall();
	    }

)
)(	otherlv_4='&' 
    {
    	newLeafNode(otherlv_4, grammarAccess.getXTypeParameterAccess().getAmpersandKeyword_2_2_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXTypeParameterAccess().getBoundsXGenericTypeParserRuleCall_2_2_1_0()); 
	    }
		lv_bounds_5_0=ruleXGenericType		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXTypeParameterRule());
	        }
       		add(
       			$current, 
       			"bounds",
        		lv_bounds_5_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XGenericType");
	        afterParserOrEnumRuleCall();
	    }

)
))*)?)
;





// Entry rule entryRuleXMultiplicity
entryRuleXMultiplicity returns [String current=null] 
	:
	{ newCompositeNode(grammarAccess.getXMultiplicityRule()); } 
	 iv_ruleXMultiplicity=ruleXMultiplicity 
	 { $current=$iv_ruleXMultiplicity.current.getText(); }  
	 EOF 
;

// Rule XMultiplicity
ruleXMultiplicity returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(
	kw='[' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getXMultiplicityAccess().getLeftSquareBracketKeyword_0()); 
    }
(
	kw='?' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getXMultiplicityAccess().getQuestionMarkKeyword_1_0()); 
    }

    |
	kw='*' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getXMultiplicityAccess().getAsteriskKeyword_1_1()); 
    }

    |
	kw='+' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getXMultiplicityAccess().getPlusSignKeyword_1_2()); 
    }

    |(    this_INT_4=RULE_INT    {
		$current.merge(this_INT_4);
    }

    { 
    newLeafNode(this_INT_4, grammarAccess.getXMultiplicityAccess().getINTTerminalRuleCall_1_3_0()); 
    }
(
	kw='..' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getXMultiplicityAccess().getFullStopFullStopKeyword_1_3_1_0()); 
    }
(    this_INT_6=RULE_INT    {
		$current.merge(this_INT_6);
    }

    { 
    newLeafNode(this_INT_6, grammarAccess.getXMultiplicityAccess().getINTTerminalRuleCall_1_3_1_1_0()); 
    }

    |
	kw='?' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getXMultiplicityAccess().getQuestionMarkKeyword_1_3_1_1_1()); 
    }

    |
	kw='*' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getXMultiplicityAccess().getAsteriskKeyword_1_3_1_1_2()); 
    }
))?))?
	kw=']' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getXMultiplicityAccess().getRightSquareBracketKeyword_2()); 
    }
)
    ;





// Entry rule entryRuleXBlockExpression
entryRuleXBlockExpression returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXBlockExpressionRule()); }
	 iv_ruleXBlockExpression=ruleXBlockExpression 
	 { $current=$iv_ruleXBlockExpression.current; } 
	 EOF 
;

// Rule XBlockExpression
ruleXBlockExpression returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
    {
        $current = forceCreateModelElement(
            grammarAccess.getXBlockExpressionAccess().getXBlockExpressionAction_0(),
            $current);
    }
)	otherlv_1='{' 
    {
    	newLeafNode(otherlv_1, grammarAccess.getXBlockExpressionAccess().getLeftCurlyBracketKeyword_1());
    }
((
(
		{ 
	        newCompositeNode(grammarAccess.getXBlockExpressionAccess().getExpressionsXExpressionOrVarDeclarationParserRuleCall_2_0_0()); 
	    }
		lv_expressions_2_0=ruleXExpressionOrVarDeclaration		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXBlockExpressionRule());
	        }
       		add(
       			$current, 
       			"expressions",
        		lv_expressions_2_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpressionOrVarDeclaration");
	        afterParserOrEnumRuleCall();
	    }

)
)(	otherlv_3=';' 
    {
    	newLeafNode(otherlv_3, grammarAccess.getXBlockExpressionAccess().getSemicolonKeyword_2_1());
    }
)?)*	otherlv_4='}' 
    {
    	newLeafNode(otherlv_4, grammarAccess.getXBlockExpressionAccess().getRightCurlyBracketKeyword_3());
    }
)
;





// Entry rule entryRuleXGenericType
entryRuleXGenericType returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXGenericTypeRule()); }
	 iv_ruleXGenericType=ruleXGenericType 
	 { $current=$iv_ruleXGenericType.current; } 
	 EOF 
;

// Rule XGenericType
ruleXGenericType returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
(
		{
			if ($current==null) {
	            $current = createModelElement(grammarAccess.getXGenericTypeRule());
	        }
        }
		{ 
	        newCompositeNode(grammarAccess.getXGenericTypeAccess().getTypeGenBaseCrossReference_0_0()); 
	    }
		ruleXQualifiedName		{ 
	        afterParserOrEnumRuleCall();
	    }

)
)(((	'<' 
)=>	otherlv_1='<' 
    {
    	newLeafNode(otherlv_1, grammarAccess.getXGenericTypeAccess().getLessThanSignKeyword_1_0());
    }
)(
(
		{ 
	        newCompositeNode(grammarAccess.getXGenericTypeAccess().getTypeArgumentsXGenericTypeArgumentParserRuleCall_1_1_0()); 
	    }
		lv_typeArguments_2_0=ruleXGenericTypeArgument		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXGenericTypeRule());
	        }
       		add(
       			$current, 
       			"typeArguments",
        		lv_typeArguments_2_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XGenericTypeArgument");
	        afterParserOrEnumRuleCall();
	    }

)
)(	otherlv_3=',' 
    {
    	newLeafNode(otherlv_3, grammarAccess.getXGenericTypeAccess().getCommaKeyword_1_2_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXGenericTypeAccess().getTypeArgumentsXGenericTypeArgumentParserRuleCall_1_2_1_0()); 
	    }
		lv_typeArguments_4_0=ruleXGenericTypeArgument		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXGenericTypeRule());
	        }
       		add(
       			$current, 
       			"typeArguments",
        		lv_typeArguments_4_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XGenericTypeArgument");
	        afterParserOrEnumRuleCall();
	    }

)
))*	otherlv_5='>' 
    {
    	newLeafNode(otherlv_5, grammarAccess.getXGenericTypeAccess().getGreaterThanSignKeyword_1_3());
    }
)?)
;





// Entry rule entryRuleXGenericTypeArgument
entryRuleXGenericTypeArgument returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXGenericTypeArgumentRule()); }
	 iv_ruleXGenericTypeArgument=ruleXGenericTypeArgument 
	 { $current=$iv_ruleXGenericTypeArgument.current; } 
	 EOF 
;

// Rule XGenericTypeArgument
ruleXGenericTypeArgument returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(
    { 
        newCompositeNode(grammarAccess.getXGenericTypeArgumentAccess().getXGenericTypeParserRuleCall_0()); 
    }
    this_XGenericType_0=ruleXGenericType
    { 
        $current = $this_XGenericType_0.current; 
        afterParserOrEnumRuleCall();
    }

    |
    { 
        newCompositeNode(grammarAccess.getXGenericTypeArgumentAccess().getXGenericWildcardTypeArgumentParserRuleCall_1()); 
    }
    this_XGenericWildcardTypeArgument_1=ruleXGenericWildcardTypeArgument
    { 
        $current = $this_XGenericWildcardTypeArgument_1.current; 
        afterParserOrEnumRuleCall();
    }
)
;





// Entry rule entryRuleXGenericWildcardTypeArgument
entryRuleXGenericWildcardTypeArgument returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXGenericWildcardTypeArgumentRule()); }
	 iv_ruleXGenericWildcardTypeArgument=ruleXGenericWildcardTypeArgument 
	 { $current=$iv_ruleXGenericWildcardTypeArgument.current; } 
	 EOF 
;

// Rule XGenericWildcardTypeArgument
ruleXGenericWildcardTypeArgument returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
    {
        $current = forceCreateModelElement(
            grammarAccess.getXGenericWildcardTypeArgumentAccess().getXGenericTypeAction_0(),
            $current);
    }
)	otherlv_1='?' 
    {
    	newLeafNode(otherlv_1, grammarAccess.getXGenericWildcardTypeArgumentAccess().getQuestionMarkKeyword_1());
    }
((	otherlv_2='extends' 
    {
    	newLeafNode(otherlv_2, grammarAccess.getXGenericWildcardTypeArgumentAccess().getExtendsKeyword_2_0_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXGenericWildcardTypeArgumentAccess().getUpperBoundXGenericTypeParserRuleCall_2_0_1_0()); 
	    }
		lv_upperBound_3_0=ruleXGenericType		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXGenericWildcardTypeArgumentRule());
	        }
       		set(
       			$current, 
       			"upperBound",
        		lv_upperBound_3_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XGenericType");
	        afterParserOrEnumRuleCall();
	    }

)
))
    |(	otherlv_4='super' 
    {
    	newLeafNode(otherlv_4, grammarAccess.getXGenericWildcardTypeArgumentAccess().getSuperKeyword_2_1_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXGenericWildcardTypeArgumentAccess().getLowerBoundXGenericTypeParserRuleCall_2_1_1_0()); 
	    }
		lv_lowerBound_5_0=ruleXGenericType		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXGenericWildcardTypeArgumentRule());
	        }
       		set(
       			$current, 
       			"lowerBound",
        		lv_lowerBound_5_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.XGenericType");
	        afterParserOrEnumRuleCall();
	    }

)
)))?)
;





// Entry rule entryRuleXQualifiedName
entryRuleXQualifiedName returns [String current=null] 
	:
	{ newCompositeNode(grammarAccess.getXQualifiedNameRule()); } 
	 iv_ruleXQualifiedName=ruleXQualifiedName 
	 { $current=$iv_ruleXQualifiedName.current.getText(); }  
	 EOF 
;

// Rule XQualifiedName
ruleXQualifiedName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(
    { 
        newCompositeNode(grammarAccess.getXQualifiedNameAccess().getXIDParserRuleCall_0()); 
    }
    this_XID_0=ruleXID    {
		$current.merge(this_XID_0);
    }

    { 
        afterParserOrEnumRuleCall();
    }
(
	kw='.' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getXQualifiedNameAccess().getFullStopKeyword_1_0()); 
    }

    { 
        newCompositeNode(grammarAccess.getXQualifiedNameAccess().getXIDParserRuleCall_1_1()); 
    }
    this_XID_2=ruleXID    {
		$current.merge(this_XID_2);
    }

    { 
        afterParserOrEnumRuleCall();
    }
)*)
    ;





// Entry rule entryRuleXID
entryRuleXID returns [String current=null] 
	:
	{ newCompositeNode(grammarAccess.getXIDRule()); } 
	 iv_ruleXID=ruleXID 
	 { $current=$iv_ruleXID.current.getText(); }  
	 EOF 
;

// Rule XID
ruleXID returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(    this_ID_0=RULE_ID    {
		$current.merge(this_ID_0);
    }

    { 
    newLeafNode(this_ID_0, grammarAccess.getXIDAccess().getIDTerminalRuleCall_0()); 
    }

    |
	kw='get' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getXIDAccess().getGetKeyword_1()); 
    }

    |
	kw='isSet' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getXIDAccess().getIsSetKeyword_2()); 
    }

    |
	kw='set' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getXIDAccess().getSetKeyword_3()); 
    }

    |
	kw='unset' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getXIDAccess().getUnsetKeyword_4()); 
    }
)
    ;





// Entry rule entryRuleValidID
entryRuleValidID returns [String current=null] 
	:
	{ newCompositeNode(grammarAccess.getValidIDRule()); } 
	 iv_ruleValidID=ruleValidID 
	 { $current=$iv_ruleValidID.current.getText(); }  
	 EOF 
;

// Rule ValidID
ruleValidID returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(
    { 
        newCompositeNode(grammarAccess.getValidIDAccess().getXIDParserRuleCall_0()); 
    }
    this_XID_0=ruleXID    {
		$current.merge(this_XID_0);
    }

    { 
        afterParserOrEnumRuleCall();
    }

    |
	kw='void' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getValidIDAccess().getVoidKeyword_1()); 
    }
)
    ;





// Entry rule entryRuleFeatureCallID
entryRuleFeatureCallID returns [String current=null] 
	:
	{ newCompositeNode(grammarAccess.getFeatureCallIDRule()); } 
	 iv_ruleFeatureCallID=ruleFeatureCallID 
	 { $current=$iv_ruleFeatureCallID.current.getText(); }  
	 EOF 
;

// Rule FeatureCallID
ruleFeatureCallID returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(
    { 
        newCompositeNode(grammarAccess.getFeatureCallIDAccess().getValidIDParserRuleCall_0()); 
    }
    this_ValidID_0=ruleValidID    {
		$current.merge(this_ValidID_0);
    }

    { 
        afterParserOrEnumRuleCall();
    }

    |
	kw='abstract' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getAbstractKeyword_1()); 
    }

    |
	kw='annotation' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getAnnotationKeyword_2()); 
    }

    |
	kw='as' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getAsKeyword_3()); 
    }

    |
	kw='class' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getClassKeyword_4()); 
    }

    |
	kw='container' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getContainerKeyword_5()); 
    }

    |
	kw='contains' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getContainsKeyword_6()); 
    }

    |
	kw='convert' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getConvertKeyword_7()); 
    }

    |
	kw='create' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getCreateKeyword_8()); 
    }

    |
	kw='derived' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getDerivedKeyword_9()); 
    }

    |
	kw='enum' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getEnumKeyword_10()); 
    }

    |
	kw='extends' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getExtendsKeyword_11()); 
    }

    |
	kw='extension' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getExtensionKeyword_12()); 
    }

    |
	kw='id' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getIdKeyword_13()); 
    }

    |
	kw='import' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getImportKeyword_14()); 
    }

    |
	kw='keys' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getKeysKeyword_15()); 
    }

    |
	kw='interface' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getInterfaceKeyword_16()); 
    }

    |
	kw='local' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getLocalKeyword_17()); 
    }

    |
	kw='op' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getOpKeyword_18()); 
    }

    |
	kw='opposite' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getOppositeKeyword_19()); 
    }

    |
	kw='package' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getPackageKeyword_20()); 
    }

    |
	kw='readonly' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getReadonlyKeyword_21()); 
    }

    |
	kw='refers' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getRefersKeyword_22()); 
    }

    |
	kw='resolving' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getResolvingKeyword_23()); 
    }

    |
	kw='static' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getStaticKeyword_24()); 
    }

    |
	kw='throws' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getThrowsKeyword_25()); 
    }

    |
	kw='transient' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getTransientKeyword_26()); 
    }

    |
	kw='unique' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getUniqueKeyword_27()); 
    }

    |
	kw='unordered' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getUnorderedKeyword_28()); 
    }

    |
	kw='unsettable' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getUnsettableKeyword_29()); 
    }

    |
	kw='volatile' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getVolatileKeyword_30()); 
    }

    |
	kw='wraps' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getWrapsKeyword_31()); 
    }
)
    ;





// Entry rule entryRuleXExpression
entryRuleXExpression returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXExpressionRule()); }
	 iv_ruleXExpression=ruleXExpression 
	 { $current=$iv_ruleXExpression.current; } 
	 EOF 
;

// Rule XExpression
ruleXExpression returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:

    { 
        newCompositeNode(grammarAccess.getXExpressionAccess().getXAssignmentParserRuleCall()); 
    }
    this_XAssignment_0=ruleXAssignment
    { 
        $current = $this_XAssignment_0.current; 
        afterParserOrEnumRuleCall();
    }

;





// Entry rule entryRuleXAssignment
entryRuleXAssignment returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXAssignmentRule()); }
	 iv_ruleXAssignment=ruleXAssignment 
	 { $current=$iv_ruleXAssignment.current; } 
	 EOF 
;

// Rule XAssignment
ruleXAssignment returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(((
    {
        $current = forceCreateModelElement(
            grammarAccess.getXAssignmentAccess().getXAssignmentAction_0_0(),
            $current);
    }
)(
(
		{
			if ($current==null) {
	            $current = createModelElement(grammarAccess.getXAssignmentRule());
	        }
        }
		{ 
	        newCompositeNode(grammarAccess.getXAssignmentAccess().getFeatureJvmIdentifiableElementCrossReference_0_1_0()); 
	    }
		ruleFeatureCallID		{ 
	        afterParserOrEnumRuleCall();
	    }

)
)
    { 
        newCompositeNode(grammarAccess.getXAssignmentAccess().getOpSingleAssignParserRuleCall_0_2()); 
    }
ruleOpSingleAssign
    { 
        afterParserOrEnumRuleCall();
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXAssignmentAccess().getValueXAssignmentParserRuleCall_0_3_0()); 
	    }
		lv_value_3_0=ruleXAssignment		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXAssignmentRule());
	        }
       		set(
       			$current, 
       			"value",
        		lv_value_3_0, 
        		"org.eclipse.xtext.xbase.Xbase.XAssignment");
	        afterParserOrEnumRuleCall();
	    }

)
))
    |(
    { 
        newCompositeNode(grammarAccess.getXAssignmentAccess().getXOrExpressionParserRuleCall_1_0()); 
    }
    this_XOrExpression_4=ruleXOrExpression
    { 
        $current = $this_XOrExpression_4.current; 
        afterParserOrEnumRuleCall();
    }
(((((
)(
(
		ruleOpMultiAssign
)
)))=>((
    {
        $current = forceCreateModelElementAndSet(
            grammarAccess.getXAssignmentAccess().getXBinaryOperationLeftOperandAction_1_1_0_0_0(),
            $current);
    }
)(
(
		{
			if ($current==null) {
	            $current = createModelElement(grammarAccess.getXAssignmentRule());
	        }
        }
		{ 
	        newCompositeNode(grammarAccess.getXAssignmentAccess().getFeatureJvmIdentifiableElementCrossReference_1_1_0_0_1_0()); 
	    }
		ruleOpMultiAssign		{ 
	        afterParserOrEnumRuleCall();
	    }

)
)))(
(
		{ 
	        newCompositeNode(grammarAccess.getXAssignmentAccess().getRightOperandXAssignmentParserRuleCall_1_1_1_0()); 
	    }
		lv_rightOperand_7_0=ruleXAssignment		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXAssignmentRule());
	        }
       		set(
       			$current, 
       			"rightOperand",
        		lv_rightOperand_7_0, 
        		"org.eclipse.xtext.xbase.Xbase.XAssignment");
	        afterParserOrEnumRuleCall();
	    }

)
))?))
;





// Entry rule entryRuleOpSingleAssign
entryRuleOpSingleAssign returns [String current=null] 
	:
	{ newCompositeNode(grammarAccess.getOpSingleAssignRule()); } 
	 iv_ruleOpSingleAssign=ruleOpSingleAssign 
	 { $current=$iv_ruleOpSingleAssign.current.getText(); }  
	 EOF 
;

// Rule OpSingleAssign
ruleOpSingleAssign returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:

	kw='=' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpSingleAssignAccess().getEqualsSignKeyword()); 
    }

    ;





// Entry rule entryRuleOpMultiAssign
entryRuleOpMultiAssign returns [String current=null] 
	:
	{ newCompositeNode(grammarAccess.getOpMultiAssignRule()); } 
	 iv_ruleOpMultiAssign=ruleOpMultiAssign 
	 { $current=$iv_ruleOpMultiAssign.current.getText(); }  
	 EOF 
;

// Rule OpMultiAssign
ruleOpMultiAssign returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(
	kw='+=' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpMultiAssignAccess().getPlusSignEqualsSignKeyword_0()); 
    }

    |
	kw='-=' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpMultiAssignAccess().getHyphenMinusEqualsSignKeyword_1()); 
    }

    |
	kw='*=' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpMultiAssignAccess().getAsteriskEqualsSignKeyword_2()); 
    }

    |
	kw='/=' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpMultiAssignAccess().getSolidusEqualsSignKeyword_3()); 
    }

    |
	kw='%=' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpMultiAssignAccess().getPercentSignEqualsSignKeyword_4()); 
    }

    |(
	kw='<' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpMultiAssignAccess().getLessThanSignKeyword_5_0()); 
    }

	kw='<' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpMultiAssignAccess().getLessThanSignKeyword_5_1()); 
    }

	kw='=' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpMultiAssignAccess().getEqualsSignKeyword_5_2()); 
    }
)
    |(
	kw='>' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpMultiAssignAccess().getGreaterThanSignKeyword_6_0()); 
    }
(
	kw='>' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpMultiAssignAccess().getGreaterThanSignKeyword_6_1()); 
    }
)?
	kw='>=' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpMultiAssignAccess().getGreaterThanSignEqualsSignKeyword_6_2()); 
    }
))
    ;





// Entry rule entryRuleXOrExpression
entryRuleXOrExpression returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXOrExpressionRule()); }
	 iv_ruleXOrExpression=ruleXOrExpression 
	 { $current=$iv_ruleXOrExpression.current; } 
	 EOF 
;

// Rule XOrExpression
ruleXOrExpression returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(
    { 
        newCompositeNode(grammarAccess.getXOrExpressionAccess().getXAndExpressionParserRuleCall_0()); 
    }
    this_XAndExpression_0=ruleXAndExpression
    { 
        $current = $this_XAndExpression_0.current; 
        afterParserOrEnumRuleCall();
    }
(((((
)(
(
		ruleOpOr
)
)))=>((
    {
        $current = forceCreateModelElementAndSet(
            grammarAccess.getXOrExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0(),
            $current);
    }
)(
(
		{
			if ($current==null) {
	            $current = createModelElement(grammarAccess.getXOrExpressionRule());
	        }
        }
		{ 
	        newCompositeNode(grammarAccess.getXOrExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_1_0()); 
	    }
		ruleOpOr		{ 
	        afterParserOrEnumRuleCall();
	    }

)
)))(
(
		{ 
	        newCompositeNode(grammarAccess.getXOrExpressionAccess().getRightOperandXAndExpressionParserRuleCall_1_1_0()); 
	    }
		lv_rightOperand_3_0=ruleXAndExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXOrExpressionRule());
	        }
       		set(
       			$current, 
       			"rightOperand",
        		lv_rightOperand_3_0, 
        		"org.eclipse.xtext.xbase.Xbase.XAndExpression");
	        afterParserOrEnumRuleCall();
	    }

)
))*)
;





// Entry rule entryRuleOpOr
entryRuleOpOr returns [String current=null] 
	:
	{ newCompositeNode(grammarAccess.getOpOrRule()); } 
	 iv_ruleOpOr=ruleOpOr 
	 { $current=$iv_ruleOpOr.current.getText(); }  
	 EOF 
;

// Rule OpOr
ruleOpOr returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:

	kw='||' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpOrAccess().getVerticalLineVerticalLineKeyword()); 
    }

    ;





// Entry rule entryRuleXAndExpression
entryRuleXAndExpression returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXAndExpressionRule()); }
	 iv_ruleXAndExpression=ruleXAndExpression 
	 { $current=$iv_ruleXAndExpression.current; } 
	 EOF 
;

// Rule XAndExpression
ruleXAndExpression returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(
    { 
        newCompositeNode(grammarAccess.getXAndExpressionAccess().getXEqualityExpressionParserRuleCall_0()); 
    }
    this_XEqualityExpression_0=ruleXEqualityExpression
    { 
        $current = $this_XEqualityExpression_0.current; 
        afterParserOrEnumRuleCall();
    }
(((((
)(
(
		ruleOpAnd
)
)))=>((
    {
        $current = forceCreateModelElementAndSet(
            grammarAccess.getXAndExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0(),
            $current);
    }
)(
(
		{
			if ($current==null) {
	            $current = createModelElement(grammarAccess.getXAndExpressionRule());
	        }
        }
		{ 
	        newCompositeNode(grammarAccess.getXAndExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_1_0()); 
	    }
		ruleOpAnd		{ 
	        afterParserOrEnumRuleCall();
	    }

)
)))(
(
		{ 
	        newCompositeNode(grammarAccess.getXAndExpressionAccess().getRightOperandXEqualityExpressionParserRuleCall_1_1_0()); 
	    }
		lv_rightOperand_3_0=ruleXEqualityExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXAndExpressionRule());
	        }
       		set(
       			$current, 
       			"rightOperand",
        		lv_rightOperand_3_0, 
        		"org.eclipse.xtext.xbase.Xbase.XEqualityExpression");
	        afterParserOrEnumRuleCall();
	    }

)
))*)
;





// Entry rule entryRuleOpAnd
entryRuleOpAnd returns [String current=null] 
	:
	{ newCompositeNode(grammarAccess.getOpAndRule()); } 
	 iv_ruleOpAnd=ruleOpAnd 
	 { $current=$iv_ruleOpAnd.current.getText(); }  
	 EOF 
;

// Rule OpAnd
ruleOpAnd returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:

	kw='&&' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpAndAccess().getAmpersandAmpersandKeyword()); 
    }

    ;





// Entry rule entryRuleXEqualityExpression
entryRuleXEqualityExpression returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXEqualityExpressionRule()); }
	 iv_ruleXEqualityExpression=ruleXEqualityExpression 
	 { $current=$iv_ruleXEqualityExpression.current; } 
	 EOF 
;

// Rule XEqualityExpression
ruleXEqualityExpression returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(
    { 
        newCompositeNode(grammarAccess.getXEqualityExpressionAccess().getXRelationalExpressionParserRuleCall_0()); 
    }
    this_XRelationalExpression_0=ruleXRelationalExpression
    { 
        $current = $this_XRelationalExpression_0.current; 
        afterParserOrEnumRuleCall();
    }
(((((
)(
(
		ruleOpEquality
)
)))=>((
    {
        $current = forceCreateModelElementAndSet(
            grammarAccess.getXEqualityExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0(),
            $current);
    }
)(
(
		{
			if ($current==null) {
	            $current = createModelElement(grammarAccess.getXEqualityExpressionRule());
	        }
        }
		{ 
	        newCompositeNode(grammarAccess.getXEqualityExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_1_0()); 
	    }
		ruleOpEquality		{ 
	        afterParserOrEnumRuleCall();
	    }

)
)))(
(
		{ 
	        newCompositeNode(grammarAccess.getXEqualityExpressionAccess().getRightOperandXRelationalExpressionParserRuleCall_1_1_0()); 
	    }
		lv_rightOperand_3_0=ruleXRelationalExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXEqualityExpressionRule());
	        }
       		set(
       			$current, 
       			"rightOperand",
        		lv_rightOperand_3_0, 
        		"org.eclipse.xtext.xbase.Xbase.XRelationalExpression");
	        afterParserOrEnumRuleCall();
	    }

)
))*)
;





// Entry rule entryRuleOpEquality
entryRuleOpEquality returns [String current=null] 
	:
	{ newCompositeNode(grammarAccess.getOpEqualityRule()); } 
	 iv_ruleOpEquality=ruleOpEquality 
	 { $current=$iv_ruleOpEquality.current.getText(); }  
	 EOF 
;

// Rule OpEquality
ruleOpEquality returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(
	kw='==' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpEqualityAccess().getEqualsSignEqualsSignKeyword_0()); 
    }

    |
	kw='!=' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpEqualityAccess().getExclamationMarkEqualsSignKeyword_1()); 
    }

    |
	kw='===' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpEqualityAccess().getEqualsSignEqualsSignEqualsSignKeyword_2()); 
    }

    |
	kw='!==' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpEqualityAccess().getExclamationMarkEqualsSignEqualsSignKeyword_3()); 
    }
)
    ;





// Entry rule entryRuleXRelationalExpression
entryRuleXRelationalExpression returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXRelationalExpressionRule()); }
	 iv_ruleXRelationalExpression=ruleXRelationalExpression 
	 { $current=$iv_ruleXRelationalExpression.current; } 
	 EOF 
;

// Rule XRelationalExpression
ruleXRelationalExpression returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(
    { 
        newCompositeNode(grammarAccess.getXRelationalExpressionAccess().getXOtherOperatorExpressionParserRuleCall_0()); 
    }
    this_XOtherOperatorExpression_0=ruleXOtherOperatorExpression
    { 
        $current = $this_XOtherOperatorExpression_0.current; 
        afterParserOrEnumRuleCall();
    }
((((((
)	'instanceof' 
))=>((
    {
        $current = forceCreateModelElementAndSet(
            grammarAccess.getXRelationalExpressionAccess().getXInstanceOfExpressionExpressionAction_1_0_0_0_0(),
            $current);
    }
)	otherlv_2='instanceof' 
    {
    	newLeafNode(otherlv_2, grammarAccess.getXRelationalExpressionAccess().getInstanceofKeyword_1_0_0_0_1());
    }
))(
(
		{ 
	        newCompositeNode(grammarAccess.getXRelationalExpressionAccess().getTypeJvmTypeReferenceParserRuleCall_1_0_1_0()); 
	    }
		lv_type_3_0=ruleJvmTypeReference		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXRelationalExpressionRule());
	        }
       		set(
       			$current, 
       			"type",
        		lv_type_3_0, 
        		"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
	        afterParserOrEnumRuleCall();
	    }

)
))
    |(((((
)(
(
		ruleOpCompare
)
)))=>((
    {
        $current = forceCreateModelElementAndSet(
            grammarAccess.getXRelationalExpressionAccess().getXBinaryOperationLeftOperandAction_1_1_0_0_0(),
            $current);
    }
)(
(
		{
			if ($current==null) {
	            $current = createModelElement(grammarAccess.getXRelationalExpressionRule());
	        }
        }
		{ 
	        newCompositeNode(grammarAccess.getXRelationalExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_1_0_0_1_0()); 
	    }
		ruleOpCompare		{ 
	        afterParserOrEnumRuleCall();
	    }

)
)))(
(
		{ 
	        newCompositeNode(grammarAccess.getXRelationalExpressionAccess().getRightOperandXOtherOperatorExpressionParserRuleCall_1_1_1_0()); 
	    }
		lv_rightOperand_6_0=ruleXOtherOperatorExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXRelationalExpressionRule());
	        }
       		set(
       			$current, 
       			"rightOperand",
        		lv_rightOperand_6_0, 
        		"org.eclipse.xtext.xbase.Xbase.XOtherOperatorExpression");
	        afterParserOrEnumRuleCall();
	    }

)
)))*)
;





// Entry rule entryRuleOpCompare
entryRuleOpCompare returns [String current=null] 
	:
	{ newCompositeNode(grammarAccess.getOpCompareRule()); } 
	 iv_ruleOpCompare=ruleOpCompare 
	 { $current=$iv_ruleOpCompare.current.getText(); }  
	 EOF 
;

// Rule OpCompare
ruleOpCompare returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(
	kw='>=' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpCompareAccess().getGreaterThanSignEqualsSignKeyword_0()); 
    }

    |(
	kw='<' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpCompareAccess().getLessThanSignKeyword_1_0()); 
    }

	kw='=' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpCompareAccess().getEqualsSignKeyword_1_1()); 
    }
)
    |
	kw='>' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpCompareAccess().getGreaterThanSignKeyword_2()); 
    }

    |
	kw='<' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpCompareAccess().getLessThanSignKeyword_3()); 
    }
)
    ;





// Entry rule entryRuleXOtherOperatorExpression
entryRuleXOtherOperatorExpression returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXOtherOperatorExpressionRule()); }
	 iv_ruleXOtherOperatorExpression=ruleXOtherOperatorExpression 
	 { $current=$iv_ruleXOtherOperatorExpression.current; } 
	 EOF 
;

// Rule XOtherOperatorExpression
ruleXOtherOperatorExpression returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(
    { 
        newCompositeNode(grammarAccess.getXOtherOperatorExpressionAccess().getXAdditiveExpressionParserRuleCall_0()); 
    }
    this_XAdditiveExpression_0=ruleXAdditiveExpression
    { 
        $current = $this_XAdditiveExpression_0.current; 
        afterParserOrEnumRuleCall();
    }
(((((
)(
(
		ruleOpOther
)
)))=>((
    {
        $current = forceCreateModelElementAndSet(
            grammarAccess.getXOtherOperatorExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0(),
            $current);
    }
)(
(
		{
			if ($current==null) {
	            $current = createModelElement(grammarAccess.getXOtherOperatorExpressionRule());
	        }
        }
		{ 
	        newCompositeNode(grammarAccess.getXOtherOperatorExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_1_0()); 
	    }
		ruleOpOther		{ 
	        afterParserOrEnumRuleCall();
	    }

)
)))(
(
		{ 
	        newCompositeNode(grammarAccess.getXOtherOperatorExpressionAccess().getRightOperandXAdditiveExpressionParserRuleCall_1_1_0()); 
	    }
		lv_rightOperand_3_0=ruleXAdditiveExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXOtherOperatorExpressionRule());
	        }
       		set(
       			$current, 
       			"rightOperand",
        		lv_rightOperand_3_0, 
        		"org.eclipse.xtext.xbase.Xbase.XAdditiveExpression");
	        afterParserOrEnumRuleCall();
	    }

)
))*)
;





// Entry rule entryRuleOpOther
entryRuleOpOther returns [String current=null] 
	:
	{ newCompositeNode(grammarAccess.getOpOtherRule()); } 
	 iv_ruleOpOther=ruleOpOther 
	 { $current=$iv_ruleOpOther.current.getText(); }  
	 EOF 
;

// Rule OpOther
ruleOpOther returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(
	kw='->' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpOtherAccess().getHyphenMinusGreaterThanSignKeyword_0()); 
    }

    |
	kw='..<' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpOtherAccess().getFullStopFullStopLessThanSignKeyword_1()); 
    }

    |(
	kw='>' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpOtherAccess().getGreaterThanSignKeyword_2_0()); 
    }

	kw='..' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpOtherAccess().getFullStopFullStopKeyword_2_1()); 
    }
)
    |
	kw='..' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpOtherAccess().getFullStopFullStopKeyword_3()); 
    }

    |
	kw='=>' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpOtherAccess().getEqualsSignGreaterThanSignKeyword_4()); 
    }

    |(
	kw='>' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpOtherAccess().getGreaterThanSignKeyword_5_0()); 
    }
((((
	'>' 

	'>' 
))=>(
	kw='>' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpOtherAccess().getGreaterThanSignKeyword_5_1_0_0_0()); 
    }

	kw='>' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpOtherAccess().getGreaterThanSignKeyword_5_1_0_0_1()); 
    }
))
    |
	kw='>' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpOtherAccess().getGreaterThanSignKeyword_5_1_1()); 
    }
))
    |(
	kw='<' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpOtherAccess().getLessThanSignKeyword_6_0()); 
    }
((((
	'<' 

	'<' 
))=>(
	kw='<' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpOtherAccess().getLessThanSignKeyword_6_1_0_0_0()); 
    }

	kw='<' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpOtherAccess().getLessThanSignKeyword_6_1_0_0_1()); 
    }
))
    |
	kw='<' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpOtherAccess().getLessThanSignKeyword_6_1_1()); 
    }

    |
	kw='=>' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpOtherAccess().getEqualsSignGreaterThanSignKeyword_6_1_2()); 
    }
))
    |
	kw='<>' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpOtherAccess().getLessThanSignGreaterThanSignKeyword_7()); 
    }

    |
	kw='?:' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpOtherAccess().getQuestionMarkColonKeyword_8()); 
    }
)
    ;





// Entry rule entryRuleXAdditiveExpression
entryRuleXAdditiveExpression returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXAdditiveExpressionRule()); }
	 iv_ruleXAdditiveExpression=ruleXAdditiveExpression 
	 { $current=$iv_ruleXAdditiveExpression.current; } 
	 EOF 
;

// Rule XAdditiveExpression
ruleXAdditiveExpression returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(
    { 
        newCompositeNode(grammarAccess.getXAdditiveExpressionAccess().getXMultiplicativeExpressionParserRuleCall_0()); 
    }
    this_XMultiplicativeExpression_0=ruleXMultiplicativeExpression
    { 
        $current = $this_XMultiplicativeExpression_0.current; 
        afterParserOrEnumRuleCall();
    }
(((((
)(
(
		ruleOpAdd
)
)))=>((
    {
        $current = forceCreateModelElementAndSet(
            grammarAccess.getXAdditiveExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0(),
            $current);
    }
)(
(
		{
			if ($current==null) {
	            $current = createModelElement(grammarAccess.getXAdditiveExpressionRule());
	        }
        }
		{ 
	        newCompositeNode(grammarAccess.getXAdditiveExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_1_0()); 
	    }
		ruleOpAdd		{ 
	        afterParserOrEnumRuleCall();
	    }

)
)))(
(
		{ 
	        newCompositeNode(grammarAccess.getXAdditiveExpressionAccess().getRightOperandXMultiplicativeExpressionParserRuleCall_1_1_0()); 
	    }
		lv_rightOperand_3_0=ruleXMultiplicativeExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXAdditiveExpressionRule());
	        }
       		set(
       			$current, 
       			"rightOperand",
        		lv_rightOperand_3_0, 
        		"org.eclipse.xtext.xbase.Xbase.XMultiplicativeExpression");
	        afterParserOrEnumRuleCall();
	    }

)
))*)
;





// Entry rule entryRuleOpAdd
entryRuleOpAdd returns [String current=null] 
	:
	{ newCompositeNode(grammarAccess.getOpAddRule()); } 
	 iv_ruleOpAdd=ruleOpAdd 
	 { $current=$iv_ruleOpAdd.current.getText(); }  
	 EOF 
;

// Rule OpAdd
ruleOpAdd returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(
	kw='+' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpAddAccess().getPlusSignKeyword_0()); 
    }

    |
	kw='-' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpAddAccess().getHyphenMinusKeyword_1()); 
    }
)
    ;





// Entry rule entryRuleXMultiplicativeExpression
entryRuleXMultiplicativeExpression returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXMultiplicativeExpressionRule()); }
	 iv_ruleXMultiplicativeExpression=ruleXMultiplicativeExpression 
	 { $current=$iv_ruleXMultiplicativeExpression.current; } 
	 EOF 
;

// Rule XMultiplicativeExpression
ruleXMultiplicativeExpression returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(
    { 
        newCompositeNode(grammarAccess.getXMultiplicativeExpressionAccess().getXUnaryOperationParserRuleCall_0()); 
    }
    this_XUnaryOperation_0=ruleXUnaryOperation
    { 
        $current = $this_XUnaryOperation_0.current; 
        afterParserOrEnumRuleCall();
    }
(((((
)(
(
		ruleOpMulti
)
)))=>((
    {
        $current = forceCreateModelElementAndSet(
            grammarAccess.getXMultiplicativeExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0(),
            $current);
    }
)(
(
		{
			if ($current==null) {
	            $current = createModelElement(grammarAccess.getXMultiplicativeExpressionRule());
	        }
        }
		{ 
	        newCompositeNode(grammarAccess.getXMultiplicativeExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_1_0()); 
	    }
		ruleOpMulti		{ 
	        afterParserOrEnumRuleCall();
	    }

)
)))(
(
		{ 
	        newCompositeNode(grammarAccess.getXMultiplicativeExpressionAccess().getRightOperandXUnaryOperationParserRuleCall_1_1_0()); 
	    }
		lv_rightOperand_3_0=ruleXUnaryOperation		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXMultiplicativeExpressionRule());
	        }
       		set(
       			$current, 
       			"rightOperand",
        		lv_rightOperand_3_0, 
        		"org.eclipse.xtext.xbase.Xbase.XUnaryOperation");
	        afterParserOrEnumRuleCall();
	    }

)
))*)
;





// Entry rule entryRuleOpMulti
entryRuleOpMulti returns [String current=null] 
	:
	{ newCompositeNode(grammarAccess.getOpMultiRule()); } 
	 iv_ruleOpMulti=ruleOpMulti 
	 { $current=$iv_ruleOpMulti.current.getText(); }  
	 EOF 
;

// Rule OpMulti
ruleOpMulti returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(
	kw='*' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpMultiAccess().getAsteriskKeyword_0()); 
    }

    |
	kw='**' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpMultiAccess().getAsteriskAsteriskKeyword_1()); 
    }

    |
	kw='/' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpMultiAccess().getSolidusKeyword_2()); 
    }

    |
	kw='%' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpMultiAccess().getPercentSignKeyword_3()); 
    }
)
    ;





// Entry rule entryRuleXUnaryOperation
entryRuleXUnaryOperation returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXUnaryOperationRule()); }
	 iv_ruleXUnaryOperation=ruleXUnaryOperation 
	 { $current=$iv_ruleXUnaryOperation.current; } 
	 EOF 
;

// Rule XUnaryOperation
ruleXUnaryOperation returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(((
    {
        $current = forceCreateModelElement(
            grammarAccess.getXUnaryOperationAccess().getXUnaryOperationAction_0_0(),
            $current);
    }
)(
(
		{
			if ($current==null) {
	            $current = createModelElement(grammarAccess.getXUnaryOperationRule());
	        }
        }
		{ 
	        newCompositeNode(grammarAccess.getXUnaryOperationAccess().getFeatureJvmIdentifiableElementCrossReference_0_1_0()); 
	    }
		ruleOpUnary		{ 
	        afterParserOrEnumRuleCall();
	    }

)
)(
(
		{ 
	        newCompositeNode(grammarAccess.getXUnaryOperationAccess().getOperandXUnaryOperationParserRuleCall_0_2_0()); 
	    }
		lv_operand_2_0=ruleXUnaryOperation		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXUnaryOperationRule());
	        }
       		set(
       			$current, 
       			"operand",
        		lv_operand_2_0, 
        		"org.eclipse.xtext.xbase.Xbase.XUnaryOperation");
	        afterParserOrEnumRuleCall();
	    }

)
))
    |
    { 
        newCompositeNode(grammarAccess.getXUnaryOperationAccess().getXCastedExpressionParserRuleCall_1()); 
    }
    this_XCastedExpression_3=ruleXCastedExpression
    { 
        $current = $this_XCastedExpression_3.current; 
        afterParserOrEnumRuleCall();
    }
)
;





// Entry rule entryRuleOpUnary
entryRuleOpUnary returns [String current=null] 
	:
	{ newCompositeNode(grammarAccess.getOpUnaryRule()); } 
	 iv_ruleOpUnary=ruleOpUnary 
	 { $current=$iv_ruleOpUnary.current.getText(); }  
	 EOF 
;

// Rule OpUnary
ruleOpUnary returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(
	kw='!' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpUnaryAccess().getExclamationMarkKeyword_0()); 
    }

    |
	kw='-' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpUnaryAccess().getHyphenMinusKeyword_1()); 
    }

    |
	kw='+' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpUnaryAccess().getPlusSignKeyword_2()); 
    }
)
    ;





// Entry rule entryRuleXCastedExpression
entryRuleXCastedExpression returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXCastedExpressionRule()); }
	 iv_ruleXCastedExpression=ruleXCastedExpression 
	 { $current=$iv_ruleXCastedExpression.current; } 
	 EOF 
;

// Rule XCastedExpression
ruleXCastedExpression returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(
    { 
        newCompositeNode(grammarAccess.getXCastedExpressionAccess().getXPostfixOperationParserRuleCall_0()); 
    }
    this_XPostfixOperation_0=ruleXPostfixOperation
    { 
        $current = $this_XPostfixOperation_0.current; 
        afterParserOrEnumRuleCall();
    }
(((((
)	'as' 
))=>((
    {
        $current = forceCreateModelElementAndSet(
            grammarAccess.getXCastedExpressionAccess().getXCastedExpressionTargetAction_1_0_0_0(),
            $current);
    }
)	otherlv_2='as' 
    {
    	newLeafNode(otherlv_2, grammarAccess.getXCastedExpressionAccess().getAsKeyword_1_0_0_1());
    }
))(
(
		{ 
	        newCompositeNode(grammarAccess.getXCastedExpressionAccess().getTypeJvmTypeReferenceParserRuleCall_1_1_0()); 
	    }
		lv_type_3_0=ruleJvmTypeReference		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXCastedExpressionRule());
	        }
       		set(
       			$current, 
       			"type",
        		lv_type_3_0, 
        		"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
	        afterParserOrEnumRuleCall();
	    }

)
))*)
;





// Entry rule entryRuleXPostfixOperation
entryRuleXPostfixOperation returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXPostfixOperationRule()); }
	 iv_ruleXPostfixOperation=ruleXPostfixOperation 
	 { $current=$iv_ruleXPostfixOperation.current; } 
	 EOF 
;

// Rule XPostfixOperation
ruleXPostfixOperation returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(
    { 
        newCompositeNode(grammarAccess.getXPostfixOperationAccess().getXMemberFeatureCallParserRuleCall_0()); 
    }
    this_XMemberFeatureCall_0=ruleXMemberFeatureCall
    { 
        $current = $this_XMemberFeatureCall_0.current; 
        afterParserOrEnumRuleCall();
    }
((((
)(
(
		ruleOpPostfix
)
)))=>((
    {
        $current = forceCreateModelElementAndSet(
            grammarAccess.getXPostfixOperationAccess().getXPostfixOperationOperandAction_1_0_0(),
            $current);
    }
)(
(
		{
			if ($current==null) {
	            $current = createModelElement(grammarAccess.getXPostfixOperationRule());
	        }
        }
		{ 
	        newCompositeNode(grammarAccess.getXPostfixOperationAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_1_0()); 
	    }
		ruleOpPostfix		{ 
	        afterParserOrEnumRuleCall();
	    }

)
)))?)
;





// Entry rule entryRuleOpPostfix
entryRuleOpPostfix returns [String current=null] 
	:
	{ newCompositeNode(grammarAccess.getOpPostfixRule()); } 
	 iv_ruleOpPostfix=ruleOpPostfix 
	 { $current=$iv_ruleOpPostfix.current.getText(); }  
	 EOF 
;

// Rule OpPostfix
ruleOpPostfix returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(
	kw='++' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpPostfixAccess().getPlusSignPlusSignKeyword_0()); 
    }

    |
	kw='--' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getOpPostfixAccess().getHyphenMinusHyphenMinusKeyword_1()); 
    }
)
    ;





// Entry rule entryRuleXMemberFeatureCall
entryRuleXMemberFeatureCall returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXMemberFeatureCallRule()); }
	 iv_ruleXMemberFeatureCall=ruleXMemberFeatureCall 
	 { $current=$iv_ruleXMemberFeatureCall.current; } 
	 EOF 
;

// Rule XMemberFeatureCall
ruleXMemberFeatureCall returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(
    { 
        newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getXPrimaryExpressionParserRuleCall_0()); 
    }
    this_XPrimaryExpression_0=ruleXPrimaryExpression
    { 
        $current = $this_XPrimaryExpression_0.current; 
        afterParserOrEnumRuleCall();
    }
((((((
)(	'.' 

    |(
(
	'::' 
 

)
))(
(
		ruleFeatureCallID
)
)	ruleOpSingleAssign))=>((
    {
        $current = forceCreateModelElementAndSet(
            grammarAccess.getXMemberFeatureCallAccess().getXAssignmentAssignableAction_1_0_0_0_0(),
            $current);
    }
)(	otherlv_2='.' 
    {
    	newLeafNode(otherlv_2, grammarAccess.getXMemberFeatureCallAccess().getFullStopKeyword_1_0_0_0_1_0());
    }

    |(
(
		lv_explicitStatic_3_0=	'::' 
    {
        newLeafNode(lv_explicitStatic_3_0, grammarAccess.getXMemberFeatureCallAccess().getExplicitStaticColonColonKeyword_1_0_0_0_1_1_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXMemberFeatureCallRule());
	        }
       		setWithLastConsumed($current, "explicitStatic", true, "::");
	    }

)
))(
(
		{
			if ($current==null) {
	            $current = createModelElement(grammarAccess.getXMemberFeatureCallRule());
	        }
        }
		{ 
	        newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_0_2_0()); 
	    }
		ruleFeatureCallID		{ 
	        afterParserOrEnumRuleCall();
	    }

)
)
    { 
        newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getOpSingleAssignParserRuleCall_1_0_0_0_3()); 
    }
ruleOpSingleAssign
    { 
        afterParserOrEnumRuleCall();
    }
))(
(
		{ 
	        newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getValueXAssignmentParserRuleCall_1_0_1_0()); 
	    }
		lv_value_6_0=ruleXAssignment		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXMemberFeatureCallRule());
	        }
       		set(
       			$current, 
       			"value",
        		lv_value_6_0, 
        		"org.eclipse.xtext.xbase.Xbase.XAssignment");
	        afterParserOrEnumRuleCall();
	    }

)
))
    |(((((
)(	'.' 

    |(
(
	'?.' 
 

)
)
    |(
(
	'::' 
 

)
))))=>((
    {
        $current = forceCreateModelElementAndSet(
            grammarAccess.getXMemberFeatureCallAccess().getXMemberFeatureCallMemberCallTargetAction_1_1_0_0_0(),
            $current);
    }
)(	otherlv_8='.' 
    {
    	newLeafNode(otherlv_8, grammarAccess.getXMemberFeatureCallAccess().getFullStopKeyword_1_1_0_0_1_0());
    }

    |(
(
		lv_nullSafe_9_0=	'?.' 
    {
        newLeafNode(lv_nullSafe_9_0, grammarAccess.getXMemberFeatureCallAccess().getNullSafeQuestionMarkFullStopKeyword_1_1_0_0_1_1_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXMemberFeatureCallRule());
	        }
       		setWithLastConsumed($current, "nullSafe", true, "?.");
	    }

)
)
    |(
(
		lv_explicitStatic_10_0=	'::' 
    {
        newLeafNode(lv_explicitStatic_10_0, grammarAccess.getXMemberFeatureCallAccess().getExplicitStaticColonColonKeyword_1_1_0_0_1_2_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXMemberFeatureCallRule());
	        }
       		setWithLastConsumed($current, "explicitStatic", true, "::");
	    }

)
))))(	otherlv_11='<' 
    {
    	newLeafNode(otherlv_11, grammarAccess.getXMemberFeatureCallAccess().getLessThanSignKeyword_1_1_1_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_1_1_1_1_0()); 
	    }
		lv_typeArguments_12_0=ruleJvmArgumentTypeReference		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXMemberFeatureCallRule());
	        }
       		add(
       			$current, 
       			"typeArguments",
        		lv_typeArguments_12_0, 
        		"org.eclipse.xtext.xbase.Xtype.JvmArgumentTypeReference");
	        afterParserOrEnumRuleCall();
	    }

)
)(	otherlv_13=',' 
    {
    	newLeafNode(otherlv_13, grammarAccess.getXMemberFeatureCallAccess().getCommaKeyword_1_1_1_2_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_1_1_1_2_1_0()); 
	    }
		lv_typeArguments_14_0=ruleJvmArgumentTypeReference		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXMemberFeatureCallRule());
	        }
       		add(
       			$current, 
       			"typeArguments",
        		lv_typeArguments_14_0, 
        		"org.eclipse.xtext.xbase.Xtype.JvmArgumentTypeReference");
	        afterParserOrEnumRuleCall();
	    }

)
))*	otherlv_15='>' 
    {
    	newLeafNode(otherlv_15, grammarAccess.getXMemberFeatureCallAccess().getGreaterThanSignKeyword_1_1_1_3());
    }
)?(
(
		{
			if ($current==null) {
	            $current = createModelElement(grammarAccess.getXMemberFeatureCallRule());
	        }
        }
		{ 
	        newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getFeatureJvmIdentifiableElementCrossReference_1_1_2_0()); 
	    }
		ruleIdOrSuper		{ 
	        afterParserOrEnumRuleCall();
	    }

)
)(((
(
	'(' 
 

)
)=>
(
		lv_explicitOperationCall_17_0=	'(' 
    {
        newLeafNode(lv_explicitOperationCall_17_0, grammarAccess.getXMemberFeatureCallAccess().getExplicitOperationCallLeftParenthesisKeyword_1_1_3_0_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXMemberFeatureCallRule());
	        }
       		setWithLastConsumed($current, "explicitOperationCall", true, "(");
	    }

)
)(((((
)((
(
ruleJvmFormalParameter
)
)(	',' 
(
(
ruleJvmFormalParameter
)
))*)?(
(
	'|' 
 

)
)))=>
(
		{ 
	        newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsXShortClosureParserRuleCall_1_1_3_1_0_0()); 
	    }
		lv_memberCallArguments_18_0=ruleXShortClosure		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXMemberFeatureCallRule());
	        }
       		add(
       			$current, 
       			"memberCallArguments",
        		lv_memberCallArguments_18_0, 
        		"org.eclipse.xtext.xbase.Xbase.XShortClosure");
	        afterParserOrEnumRuleCall();
	    }

)
)
    |((
(
		{ 
	        newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsXExpressionParserRuleCall_1_1_3_1_1_0_0()); 
	    }
		lv_memberCallArguments_19_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXMemberFeatureCallRule());
	        }
       		add(
       			$current, 
       			"memberCallArguments",
        		lv_memberCallArguments_19_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
)(	otherlv_20=',' 
    {
    	newLeafNode(otherlv_20, grammarAccess.getXMemberFeatureCallAccess().getCommaKeyword_1_1_3_1_1_1_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsXExpressionParserRuleCall_1_1_3_1_1_1_1_0()); 
	    }
		lv_memberCallArguments_21_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXMemberFeatureCallRule());
	        }
       		add(
       			$current, 
       			"memberCallArguments",
        		lv_memberCallArguments_21_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
))*))?	otherlv_22=')' 
    {
    	newLeafNode(otherlv_22, grammarAccess.getXMemberFeatureCallAccess().getRightParenthesisKeyword_1_1_3_2());
    }
)?((((
)	'[' 
))=>
(
		{ 
	        newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsXClosureParserRuleCall_1_1_4_0()); 
	    }
		lv_memberCallArguments_23_0=ruleXClosure		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXMemberFeatureCallRule());
	        }
       		add(
       			$current, 
       			"memberCallArguments",
        		lv_memberCallArguments_23_0, 
        		"org.eclipse.xtext.xbase.Xbase.XClosure");
	        afterParserOrEnumRuleCall();
	    }

)
)?))*)
;





// Entry rule entryRuleXPrimaryExpression
entryRuleXPrimaryExpression returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXPrimaryExpressionRule()); }
	 iv_ruleXPrimaryExpression=ruleXPrimaryExpression 
	 { $current=$iv_ruleXPrimaryExpression.current; } 
	 EOF 
;

// Rule XPrimaryExpression
ruleXPrimaryExpression returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(
    { 
        newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXConstructorCallParserRuleCall_0()); 
    }
    this_XConstructorCall_0=ruleXConstructorCall
    { 
        $current = $this_XConstructorCall_0.current; 
        afterParserOrEnumRuleCall();
    }

    |
    { 
        newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXBlockExpressionParserRuleCall_1()); 
    }
    this_XBlockExpression_1=ruleXBlockExpression
    { 
        $current = $this_XBlockExpression_1.current; 
        afterParserOrEnumRuleCall();
    }

    |
    { 
        newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXSwitchExpressionParserRuleCall_2()); 
    }
    this_XSwitchExpression_2=ruleXSwitchExpression
    { 
        $current = $this_XSwitchExpression_2.current; 
        afterParserOrEnumRuleCall();
    }

    |((((
)	'synchronized' 
	'(' 
))=>
    { 
        newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXSynchronizedExpressionParserRuleCall_3()); 
    }
    this_XSynchronizedExpression_3=ruleXSynchronizedExpression
    { 
        $current = $this_XSynchronizedExpression_3.current; 
        afterParserOrEnumRuleCall();
    }
)
    |
    { 
        newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXFeatureCallParserRuleCall_4()); 
    }
    this_XFeatureCall_4=ruleXFeatureCall
    { 
        $current = $this_XFeatureCall_4.current; 
        afterParserOrEnumRuleCall();
    }

    |
    { 
        newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXLiteralParserRuleCall_5()); 
    }
    this_XLiteral_5=ruleXLiteral
    { 
        $current = $this_XLiteral_5.current; 
        afterParserOrEnumRuleCall();
    }

    |
    { 
        newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXIfExpressionParserRuleCall_6()); 
    }
    this_XIfExpression_6=ruleXIfExpression
    { 
        $current = $this_XIfExpression_6.current; 
        afterParserOrEnumRuleCall();
    }

    |((((
)	'for' 
	'(' 
(
(
ruleJvmFormalParameter
)
)	':' 
))=>
    { 
        newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXForLoopExpressionParserRuleCall_7()); 
    }
    this_XForLoopExpression_7=ruleXForLoopExpression
    { 
        $current = $this_XForLoopExpression_7.current; 
        afterParserOrEnumRuleCall();
    }
)
    |
    { 
        newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXBasicForLoopExpressionParserRuleCall_8()); 
    }
    this_XBasicForLoopExpression_8=ruleXBasicForLoopExpression
    { 
        $current = $this_XBasicForLoopExpression_8.current; 
        afterParserOrEnumRuleCall();
    }

    |
    { 
        newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXWhileExpressionParserRuleCall_9()); 
    }
    this_XWhileExpression_9=ruleXWhileExpression
    { 
        $current = $this_XWhileExpression_9.current; 
        afterParserOrEnumRuleCall();
    }

    |
    { 
        newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXDoWhileExpressionParserRuleCall_10()); 
    }
    this_XDoWhileExpression_10=ruleXDoWhileExpression
    { 
        $current = $this_XDoWhileExpression_10.current; 
        afterParserOrEnumRuleCall();
    }

    |
    { 
        newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXThrowExpressionParserRuleCall_11()); 
    }
    this_XThrowExpression_11=ruleXThrowExpression
    { 
        $current = $this_XThrowExpression_11.current; 
        afterParserOrEnumRuleCall();
    }

    |
    { 
        newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXReturnExpressionParserRuleCall_12()); 
    }
    this_XReturnExpression_12=ruleXReturnExpression
    { 
        $current = $this_XReturnExpression_12.current; 
        afterParserOrEnumRuleCall();
    }

    |
    { 
        newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXTryCatchFinallyExpressionParserRuleCall_13()); 
    }
    this_XTryCatchFinallyExpression_13=ruleXTryCatchFinallyExpression
    { 
        $current = $this_XTryCatchFinallyExpression_13.current; 
        afterParserOrEnumRuleCall();
    }

    |
    { 
        newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXParenthesizedExpressionParserRuleCall_14()); 
    }
    this_XParenthesizedExpression_14=ruleXParenthesizedExpression
    { 
        $current = $this_XParenthesizedExpression_14.current; 
        afterParserOrEnumRuleCall();
    }
)
;





// Entry rule entryRuleXLiteral
entryRuleXLiteral returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXLiteralRule()); }
	 iv_ruleXLiteral=ruleXLiteral 
	 { $current=$iv_ruleXLiteral.current; } 
	 EOF 
;

// Rule XLiteral
ruleXLiteral returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(
    { 
        newCompositeNode(grammarAccess.getXLiteralAccess().getXCollectionLiteralParserRuleCall_0()); 
    }
    this_XCollectionLiteral_0=ruleXCollectionLiteral
    { 
        $current = $this_XCollectionLiteral_0.current; 
        afterParserOrEnumRuleCall();
    }

    |((((
)	'[' 
))=>
    { 
        newCompositeNode(grammarAccess.getXLiteralAccess().getXClosureParserRuleCall_1()); 
    }
    this_XClosure_1=ruleXClosure
    { 
        $current = $this_XClosure_1.current; 
        afterParserOrEnumRuleCall();
    }
)
    |
    { 
        newCompositeNode(grammarAccess.getXLiteralAccess().getXBooleanLiteralParserRuleCall_2()); 
    }
    this_XBooleanLiteral_2=ruleXBooleanLiteral
    { 
        $current = $this_XBooleanLiteral_2.current; 
        afterParserOrEnumRuleCall();
    }

    |
    { 
        newCompositeNode(grammarAccess.getXLiteralAccess().getXNumberLiteralParserRuleCall_3()); 
    }
    this_XNumberLiteral_3=ruleXNumberLiteral
    { 
        $current = $this_XNumberLiteral_3.current; 
        afterParserOrEnumRuleCall();
    }

    |
    { 
        newCompositeNode(grammarAccess.getXLiteralAccess().getXNullLiteralParserRuleCall_4()); 
    }
    this_XNullLiteral_4=ruleXNullLiteral
    { 
        $current = $this_XNullLiteral_4.current; 
        afterParserOrEnumRuleCall();
    }

    |
    { 
        newCompositeNode(grammarAccess.getXLiteralAccess().getXStringLiteralParserRuleCall_5()); 
    }
    this_XStringLiteral_5=ruleXStringLiteral
    { 
        $current = $this_XStringLiteral_5.current; 
        afterParserOrEnumRuleCall();
    }

    |
    { 
        newCompositeNode(grammarAccess.getXLiteralAccess().getXTypeLiteralParserRuleCall_6()); 
    }
    this_XTypeLiteral_6=ruleXTypeLiteral
    { 
        $current = $this_XTypeLiteral_6.current; 
        afterParserOrEnumRuleCall();
    }
)
;





// Entry rule entryRuleXCollectionLiteral
entryRuleXCollectionLiteral returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXCollectionLiteralRule()); }
	 iv_ruleXCollectionLiteral=ruleXCollectionLiteral 
	 { $current=$iv_ruleXCollectionLiteral.current; } 
	 EOF 
;

// Rule XCollectionLiteral
ruleXCollectionLiteral returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(
    { 
        newCompositeNode(grammarAccess.getXCollectionLiteralAccess().getXSetLiteralParserRuleCall_0()); 
    }
    this_XSetLiteral_0=ruleXSetLiteral
    { 
        $current = $this_XSetLiteral_0.current; 
        afterParserOrEnumRuleCall();
    }

    |
    { 
        newCompositeNode(grammarAccess.getXCollectionLiteralAccess().getXListLiteralParserRuleCall_1()); 
    }
    this_XListLiteral_1=ruleXListLiteral
    { 
        $current = $this_XListLiteral_1.current; 
        afterParserOrEnumRuleCall();
    }
)
;





// Entry rule entryRuleXSetLiteral
entryRuleXSetLiteral returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXSetLiteralRule()); }
	 iv_ruleXSetLiteral=ruleXSetLiteral 
	 { $current=$iv_ruleXSetLiteral.current; } 
	 EOF 
;

// Rule XSetLiteral
ruleXSetLiteral returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
    {
        $current = forceCreateModelElement(
            grammarAccess.getXSetLiteralAccess().getXSetLiteralAction_0(),
            $current);
    }
)	otherlv_1='#' 
    {
    	newLeafNode(otherlv_1, grammarAccess.getXSetLiteralAccess().getNumberSignKeyword_1());
    }
	otherlv_2='{' 
    {
    	newLeafNode(otherlv_2, grammarAccess.getXSetLiteralAccess().getLeftCurlyBracketKeyword_2());
    }
((
(
		{ 
	        newCompositeNode(grammarAccess.getXSetLiteralAccess().getElementsXExpressionParserRuleCall_3_0_0()); 
	    }
		lv_elements_3_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXSetLiteralRule());
	        }
       		add(
       			$current, 
       			"elements",
        		lv_elements_3_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
)(	otherlv_4=',' 
    {
    	newLeafNode(otherlv_4, grammarAccess.getXSetLiteralAccess().getCommaKeyword_3_1_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXSetLiteralAccess().getElementsXExpressionParserRuleCall_3_1_1_0()); 
	    }
		lv_elements_5_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXSetLiteralRule());
	        }
       		add(
       			$current, 
       			"elements",
        		lv_elements_5_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
))*)?	otherlv_6='}' 
    {
    	newLeafNode(otherlv_6, grammarAccess.getXSetLiteralAccess().getRightCurlyBracketKeyword_4());
    }
)
;





// Entry rule entryRuleXListLiteral
entryRuleXListLiteral returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXListLiteralRule()); }
	 iv_ruleXListLiteral=ruleXListLiteral 
	 { $current=$iv_ruleXListLiteral.current; } 
	 EOF 
;

// Rule XListLiteral
ruleXListLiteral returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
    {
        $current = forceCreateModelElement(
            grammarAccess.getXListLiteralAccess().getXListLiteralAction_0(),
            $current);
    }
)	otherlv_1='#' 
    {
    	newLeafNode(otherlv_1, grammarAccess.getXListLiteralAccess().getNumberSignKeyword_1());
    }
	otherlv_2='[' 
    {
    	newLeafNode(otherlv_2, grammarAccess.getXListLiteralAccess().getLeftSquareBracketKeyword_2());
    }
((
(
		{ 
	        newCompositeNode(grammarAccess.getXListLiteralAccess().getElementsXExpressionParserRuleCall_3_0_0()); 
	    }
		lv_elements_3_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXListLiteralRule());
	        }
       		add(
       			$current, 
       			"elements",
        		lv_elements_3_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
)(	otherlv_4=',' 
    {
    	newLeafNode(otherlv_4, grammarAccess.getXListLiteralAccess().getCommaKeyword_3_1_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXListLiteralAccess().getElementsXExpressionParserRuleCall_3_1_1_0()); 
	    }
		lv_elements_5_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXListLiteralRule());
	        }
       		add(
       			$current, 
       			"elements",
        		lv_elements_5_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
))*)?	otherlv_6=']' 
    {
    	newLeafNode(otherlv_6, grammarAccess.getXListLiteralAccess().getRightSquareBracketKeyword_4());
    }
)
;





// Entry rule entryRuleXClosure
entryRuleXClosure returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXClosureRule()); }
	 iv_ruleXClosure=ruleXClosure 
	 { $current=$iv_ruleXClosure.current; } 
	 EOF 
;

// Rule XClosure
ruleXClosure returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(((((
)	'[' 
))=>((
    {
        $current = forceCreateModelElement(
            grammarAccess.getXClosureAccess().getXClosureAction_0_0_0(),
            $current);
    }
)	otherlv_1='[' 
    {
    	newLeafNode(otherlv_1, grammarAccess.getXClosureAccess().getLeftSquareBracketKeyword_0_0_1());
    }
))(((((
(
ruleJvmFormalParameter
)
)(	',' 
(
(
ruleJvmFormalParameter
)
))*)?(
(
	'|' 
 

)
)))=>(((
(
		{ 
	        newCompositeNode(grammarAccess.getXClosureAccess().getDeclaredFormalParametersJvmFormalParameterParserRuleCall_1_0_0_0_0()); 
	    }
		lv_declaredFormalParameters_2_0=ruleJvmFormalParameter		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXClosureRule());
	        }
       		add(
       			$current, 
       			"declaredFormalParameters",
        		lv_declaredFormalParameters_2_0, 
        		"org.eclipse.xtext.xbase.Xbase.JvmFormalParameter");
	        afterParserOrEnumRuleCall();
	    }

)
)(	otherlv_3=',' 
    {
    	newLeafNode(otherlv_3, grammarAccess.getXClosureAccess().getCommaKeyword_1_0_0_1_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXClosureAccess().getDeclaredFormalParametersJvmFormalParameterParserRuleCall_1_0_0_1_1_0()); 
	    }
		lv_declaredFormalParameters_4_0=ruleJvmFormalParameter		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXClosureRule());
	        }
       		add(
       			$current, 
       			"declaredFormalParameters",
        		lv_declaredFormalParameters_4_0, 
        		"org.eclipse.xtext.xbase.Xbase.JvmFormalParameter");
	        afterParserOrEnumRuleCall();
	    }

)
))*)?(
(
		lv_explicitSyntax_5_0=	'|' 
    {
        newLeafNode(lv_explicitSyntax_5_0, grammarAccess.getXClosureAccess().getExplicitSyntaxVerticalLineKeyword_1_0_1_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXClosureRule());
	        }
       		setWithLastConsumed($current, "explicitSyntax", true, "|");
	    }

)
)))?(
(
		{ 
	        newCompositeNode(grammarAccess.getXClosureAccess().getExpressionXExpressionInClosureParserRuleCall_2_0()); 
	    }
		lv_expression_6_0=ruleXExpressionInClosure		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXClosureRule());
	        }
       		set(
       			$current, 
       			"expression",
        		lv_expression_6_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpressionInClosure");
	        afterParserOrEnumRuleCall();
	    }

)
)	otherlv_7=']' 
    {
    	newLeafNode(otherlv_7, grammarAccess.getXClosureAccess().getRightSquareBracketKeyword_3());
    }
)
;





// Entry rule entryRuleXExpressionInClosure
entryRuleXExpressionInClosure returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXExpressionInClosureRule()); }
	 iv_ruleXExpressionInClosure=ruleXExpressionInClosure 
	 { $current=$iv_ruleXExpressionInClosure.current; } 
	 EOF 
;

// Rule XExpressionInClosure
ruleXExpressionInClosure returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
    {
        $current = forceCreateModelElement(
            grammarAccess.getXExpressionInClosureAccess().getXBlockExpressionAction_0(),
            $current);
    }
)((
(
		{ 
	        newCompositeNode(grammarAccess.getXExpressionInClosureAccess().getExpressionsXExpressionOrVarDeclarationParserRuleCall_1_0_0()); 
	    }
		lv_expressions_1_0=ruleXExpressionOrVarDeclaration		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXExpressionInClosureRule());
	        }
       		add(
       			$current, 
       			"expressions",
        		lv_expressions_1_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpressionOrVarDeclaration");
	        afterParserOrEnumRuleCall();
	    }

)
)(	otherlv_2=';' 
    {
    	newLeafNode(otherlv_2, grammarAccess.getXExpressionInClosureAccess().getSemicolonKeyword_1_1());
    }
)?)*)
;





// Entry rule entryRuleXShortClosure
entryRuleXShortClosure returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXShortClosureRule()); }
	 iv_ruleXShortClosure=ruleXShortClosure 
	 { $current=$iv_ruleXShortClosure.current; } 
	 EOF 
;

// Rule XShortClosure
ruleXShortClosure returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(((((
)((
(
ruleJvmFormalParameter
)
)(	',' 
(
(
ruleJvmFormalParameter
)
))*)?(
(
	'|' 
 

)
)))=>((
    {
        $current = forceCreateModelElement(
            grammarAccess.getXShortClosureAccess().getXClosureAction_0_0_0(),
            $current);
    }
)((
(
		{ 
	        newCompositeNode(grammarAccess.getXShortClosureAccess().getDeclaredFormalParametersJvmFormalParameterParserRuleCall_0_0_1_0_0()); 
	    }
		lv_declaredFormalParameters_1_0=ruleJvmFormalParameter		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXShortClosureRule());
	        }
       		add(
       			$current, 
       			"declaredFormalParameters",
        		lv_declaredFormalParameters_1_0, 
        		"org.eclipse.xtext.xbase.Xbase.JvmFormalParameter");
	        afterParserOrEnumRuleCall();
	    }

)
)(	otherlv_2=',' 
    {
    	newLeafNode(otherlv_2, grammarAccess.getXShortClosureAccess().getCommaKeyword_0_0_1_1_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXShortClosureAccess().getDeclaredFormalParametersJvmFormalParameterParserRuleCall_0_0_1_1_1_0()); 
	    }
		lv_declaredFormalParameters_3_0=ruleJvmFormalParameter		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXShortClosureRule());
	        }
       		add(
       			$current, 
       			"declaredFormalParameters",
        		lv_declaredFormalParameters_3_0, 
        		"org.eclipse.xtext.xbase.Xbase.JvmFormalParameter");
	        afterParserOrEnumRuleCall();
	    }

)
))*)?(
(
		lv_explicitSyntax_4_0=	'|' 
    {
        newLeafNode(lv_explicitSyntax_4_0, grammarAccess.getXShortClosureAccess().getExplicitSyntaxVerticalLineKeyword_0_0_2_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXShortClosureRule());
	        }
       		setWithLastConsumed($current, "explicitSyntax", true, "|");
	    }

)
)))(
(
		{ 
	        newCompositeNode(grammarAccess.getXShortClosureAccess().getExpressionXExpressionParserRuleCall_1_0()); 
	    }
		lv_expression_5_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXShortClosureRule());
	        }
       		set(
       			$current, 
       			"expression",
        		lv_expression_5_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
))
;





// Entry rule entryRuleXParenthesizedExpression
entryRuleXParenthesizedExpression returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXParenthesizedExpressionRule()); }
	 iv_ruleXParenthesizedExpression=ruleXParenthesizedExpression 
	 { $current=$iv_ruleXParenthesizedExpression.current; } 
	 EOF 
;

// Rule XParenthesizedExpression
ruleXParenthesizedExpression returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(	otherlv_0='(' 
    {
    	newLeafNode(otherlv_0, grammarAccess.getXParenthesizedExpressionAccess().getLeftParenthesisKeyword_0());
    }

    { 
        newCompositeNode(grammarAccess.getXParenthesizedExpressionAccess().getXExpressionParserRuleCall_1()); 
    }
    this_XExpression_1=ruleXExpression
    { 
        $current = $this_XExpression_1.current; 
        afterParserOrEnumRuleCall();
    }
	otherlv_2=')' 
    {
    	newLeafNode(otherlv_2, grammarAccess.getXParenthesizedExpressionAccess().getRightParenthesisKeyword_2());
    }
)
;





// Entry rule entryRuleXIfExpression
entryRuleXIfExpression returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXIfExpressionRule()); }
	 iv_ruleXIfExpression=ruleXIfExpression 
	 { $current=$iv_ruleXIfExpression.current; } 
	 EOF 
;

// Rule XIfExpression
ruleXIfExpression returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
    {
        $current = forceCreateModelElement(
            grammarAccess.getXIfExpressionAccess().getXIfExpressionAction_0(),
            $current);
    }
)	otherlv_1='if' 
    {
    	newLeafNode(otherlv_1, grammarAccess.getXIfExpressionAccess().getIfKeyword_1());
    }
	otherlv_2='(' 
    {
    	newLeafNode(otherlv_2, grammarAccess.getXIfExpressionAccess().getLeftParenthesisKeyword_2());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXIfExpressionAccess().getIfXExpressionParserRuleCall_3_0()); 
	    }
		lv_if_3_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXIfExpressionRule());
	        }
       		set(
       			$current, 
       			"if",
        		lv_if_3_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
)	otherlv_4=')' 
    {
    	newLeafNode(otherlv_4, grammarAccess.getXIfExpressionAccess().getRightParenthesisKeyword_4());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXIfExpressionAccess().getThenXExpressionParserRuleCall_5_0()); 
	    }
		lv_then_5_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXIfExpressionRule());
	        }
       		set(
       			$current, 
       			"then",
        		lv_then_5_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
)(((	'else' 
)=>	otherlv_6='else' 
    {
    	newLeafNode(otherlv_6, grammarAccess.getXIfExpressionAccess().getElseKeyword_6_0());
    }
)(
(
		{ 
	        newCompositeNode(grammarAccess.getXIfExpressionAccess().getElseXExpressionParserRuleCall_6_1_0()); 
	    }
		lv_else_7_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXIfExpressionRule());
	        }
       		set(
       			$current, 
       			"else",
        		lv_else_7_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
))?)
;





// Entry rule entryRuleXSwitchExpression
entryRuleXSwitchExpression returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXSwitchExpressionRule()); }
	 iv_ruleXSwitchExpression=ruleXSwitchExpression 
	 { $current=$iv_ruleXSwitchExpression.current; } 
	 EOF 
;

// Rule XSwitchExpression
ruleXSwitchExpression returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
    {
        $current = forceCreateModelElement(
            grammarAccess.getXSwitchExpressionAccess().getXSwitchExpressionAction_0(),
            $current);
    }
)	otherlv_1='switch' 
    {
    	newLeafNode(otherlv_1, grammarAccess.getXSwitchExpressionAccess().getSwitchKeyword_1());
    }
(((((	'(' 
(
(
ruleJvmFormalParameter
)
)	':' 
))=>(	otherlv_2='(' 
    {
    	newLeafNode(otherlv_2, grammarAccess.getXSwitchExpressionAccess().getLeftParenthesisKeyword_2_0_0_0_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXSwitchExpressionAccess().getDeclaredParamJvmFormalParameterParserRuleCall_2_0_0_0_1_0()); 
	    }
		lv_declaredParam_3_0=ruleJvmFormalParameter		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXSwitchExpressionRule());
	        }
       		set(
       			$current, 
       			"declaredParam",
        		lv_declaredParam_3_0, 
        		"org.eclipse.xtext.xbase.Xbase.JvmFormalParameter");
	        afterParserOrEnumRuleCall();
	    }

)
)	otherlv_4=':' 
    {
    	newLeafNode(otherlv_4, grammarAccess.getXSwitchExpressionAccess().getColonKeyword_2_0_0_0_2());
    }
))(
(
		{ 
	        newCompositeNode(grammarAccess.getXSwitchExpressionAccess().getSwitchXExpressionParserRuleCall_2_0_1_0()); 
	    }
		lv_switch_5_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXSwitchExpressionRule());
	        }
       		set(
       			$current, 
       			"switch",
        		lv_switch_5_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
)	otherlv_6=')' 
    {
    	newLeafNode(otherlv_6, grammarAccess.getXSwitchExpressionAccess().getRightParenthesisKeyword_2_0_2());
    }
)
    |(((((
(
ruleJvmFormalParameter
)
)	':' 
))=>((
(
		{ 
	        newCompositeNode(grammarAccess.getXSwitchExpressionAccess().getDeclaredParamJvmFormalParameterParserRuleCall_2_1_0_0_0_0()); 
	    }
		lv_declaredParam_7_0=ruleJvmFormalParameter		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXSwitchExpressionRule());
	        }
       		set(
       			$current, 
       			"declaredParam",
        		lv_declaredParam_7_0, 
        		"org.eclipse.xtext.xbase.Xbase.JvmFormalParameter");
	        afterParserOrEnumRuleCall();
	    }

)
)	otherlv_8=':' 
    {
    	newLeafNode(otherlv_8, grammarAccess.getXSwitchExpressionAccess().getColonKeyword_2_1_0_0_1());
    }
))?(
(
		{ 
	        newCompositeNode(grammarAccess.getXSwitchExpressionAccess().getSwitchXExpressionParserRuleCall_2_1_1_0()); 
	    }
		lv_switch_9_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXSwitchExpressionRule());
	        }
       		set(
       			$current, 
       			"switch",
        		lv_switch_9_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
)))	otherlv_10='{' 
    {
    	newLeafNode(otherlv_10, grammarAccess.getXSwitchExpressionAccess().getLeftCurlyBracketKeyword_3());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXSwitchExpressionAccess().getCasesXCasePartParserRuleCall_4_0()); 
	    }
		lv_cases_11_0=ruleXCasePart		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXSwitchExpressionRule());
	        }
       		add(
       			$current, 
       			"cases",
        		lv_cases_11_0, 
        		"org.eclipse.xtext.xbase.Xbase.XCasePart");
	        afterParserOrEnumRuleCall();
	    }

)
)*(	otherlv_12='default' 
    {
    	newLeafNode(otherlv_12, grammarAccess.getXSwitchExpressionAccess().getDefaultKeyword_5_0());
    }
	otherlv_13=':' 
    {
    	newLeafNode(otherlv_13, grammarAccess.getXSwitchExpressionAccess().getColonKeyword_5_1());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXSwitchExpressionAccess().getDefaultXExpressionParserRuleCall_5_2_0()); 
	    }
		lv_default_14_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXSwitchExpressionRule());
	        }
       		set(
       			$current, 
       			"default",
        		lv_default_14_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
))?	otherlv_15='}' 
    {
    	newLeafNode(otherlv_15, grammarAccess.getXSwitchExpressionAccess().getRightCurlyBracketKeyword_6());
    }
)
;





// Entry rule entryRuleXCasePart
entryRuleXCasePart returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXCasePartRule()); }
	 iv_ruleXCasePart=ruleXCasePart 
	 { $current=$iv_ruleXCasePart.current; } 
	 EOF 
;

// Rule XCasePart
ruleXCasePart returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
    {
        $current = forceCreateModelElement(
            grammarAccess.getXCasePartAccess().getXCasePartAction_0(),
            $current);
    }
)(
(
		{ 
	        newCompositeNode(grammarAccess.getXCasePartAccess().getTypeGuardJvmTypeReferenceParserRuleCall_1_0()); 
	    }
		lv_typeGuard_1_0=ruleJvmTypeReference		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXCasePartRule());
	        }
       		set(
       			$current, 
       			"typeGuard",
        		lv_typeGuard_1_0, 
        		"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
	        afterParserOrEnumRuleCall();
	    }

)
)?(	otherlv_2='case' 
    {
    	newLeafNode(otherlv_2, grammarAccess.getXCasePartAccess().getCaseKeyword_2_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXCasePartAccess().getCaseXExpressionParserRuleCall_2_1_0()); 
	    }
		lv_case_3_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXCasePartRule());
	        }
       		set(
       			$current, 
       			"case",
        		lv_case_3_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
))?((	otherlv_4=':' 
    {
    	newLeafNode(otherlv_4, grammarAccess.getXCasePartAccess().getColonKeyword_3_0_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXCasePartAccess().getThenXExpressionParserRuleCall_3_0_1_0()); 
	    }
		lv_then_5_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXCasePartRule());
	        }
       		set(
       			$current, 
       			"then",
        		lv_then_5_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
))
    |(
(
		lv_fallThrough_6_0=	',' 
    {
        newLeafNode(lv_fallThrough_6_0, grammarAccess.getXCasePartAccess().getFallThroughCommaKeyword_3_1_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXCasePartRule());
	        }
       		setWithLastConsumed($current, "fallThrough", true, ",");
	    }

)
)))
;





// Entry rule entryRuleXForLoopExpression
entryRuleXForLoopExpression returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXForLoopExpressionRule()); }
	 iv_ruleXForLoopExpression=ruleXForLoopExpression 
	 { $current=$iv_ruleXForLoopExpression.current; } 
	 EOF 
;

// Rule XForLoopExpression
ruleXForLoopExpression returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(((((
)	'for' 
	'(' 
(
(
ruleJvmFormalParameter
)
)	':' 
))=>((
    {
        $current = forceCreateModelElement(
            grammarAccess.getXForLoopExpressionAccess().getXForLoopExpressionAction_0_0_0(),
            $current);
    }
)	otherlv_1='for' 
    {
    	newLeafNode(otherlv_1, grammarAccess.getXForLoopExpressionAccess().getForKeyword_0_0_1());
    }
	otherlv_2='(' 
    {
    	newLeafNode(otherlv_2, grammarAccess.getXForLoopExpressionAccess().getLeftParenthesisKeyword_0_0_2());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXForLoopExpressionAccess().getDeclaredParamJvmFormalParameterParserRuleCall_0_0_3_0()); 
	    }
		lv_declaredParam_3_0=ruleJvmFormalParameter		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXForLoopExpressionRule());
	        }
       		set(
       			$current, 
       			"declaredParam",
        		lv_declaredParam_3_0, 
        		"org.eclipse.xtext.xbase.Xbase.JvmFormalParameter");
	        afterParserOrEnumRuleCall();
	    }

)
)	otherlv_4=':' 
    {
    	newLeafNode(otherlv_4, grammarAccess.getXForLoopExpressionAccess().getColonKeyword_0_0_4());
    }
))(
(
		{ 
	        newCompositeNode(grammarAccess.getXForLoopExpressionAccess().getForExpressionXExpressionParserRuleCall_1_0()); 
	    }
		lv_forExpression_5_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXForLoopExpressionRule());
	        }
       		set(
       			$current, 
       			"forExpression",
        		lv_forExpression_5_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
)	otherlv_6=')' 
    {
    	newLeafNode(otherlv_6, grammarAccess.getXForLoopExpressionAccess().getRightParenthesisKeyword_2());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXForLoopExpressionAccess().getEachExpressionXExpressionParserRuleCall_3_0()); 
	    }
		lv_eachExpression_7_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXForLoopExpressionRule());
	        }
       		set(
       			$current, 
       			"eachExpression",
        		lv_eachExpression_7_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
))
;





// Entry rule entryRuleXBasicForLoopExpression
entryRuleXBasicForLoopExpression returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXBasicForLoopExpressionRule()); }
	 iv_ruleXBasicForLoopExpression=ruleXBasicForLoopExpression 
	 { $current=$iv_ruleXBasicForLoopExpression.current; } 
	 EOF 
;

// Rule XBasicForLoopExpression
ruleXBasicForLoopExpression returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
    {
        $current = forceCreateModelElement(
            grammarAccess.getXBasicForLoopExpressionAccess().getXBasicForLoopExpressionAction_0(),
            $current);
    }
)	otherlv_1='for' 
    {
    	newLeafNode(otherlv_1, grammarAccess.getXBasicForLoopExpressionAccess().getForKeyword_1());
    }
	otherlv_2='(' 
    {
    	newLeafNode(otherlv_2, grammarAccess.getXBasicForLoopExpressionAccess().getLeftParenthesisKeyword_2());
    }
((
(
		{ 
	        newCompositeNode(grammarAccess.getXBasicForLoopExpressionAccess().getInitExpressionsXExpressionOrVarDeclarationParserRuleCall_3_0_0()); 
	    }
		lv_initExpressions_3_0=ruleXExpressionOrVarDeclaration		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXBasicForLoopExpressionRule());
	        }
       		add(
       			$current, 
       			"initExpressions",
        		lv_initExpressions_3_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpressionOrVarDeclaration");
	        afterParserOrEnumRuleCall();
	    }

)
)(	otherlv_4=',' 
    {
    	newLeafNode(otherlv_4, grammarAccess.getXBasicForLoopExpressionAccess().getCommaKeyword_3_1_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXBasicForLoopExpressionAccess().getInitExpressionsXExpressionOrVarDeclarationParserRuleCall_3_1_1_0()); 
	    }
		lv_initExpressions_5_0=ruleXExpressionOrVarDeclaration		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXBasicForLoopExpressionRule());
	        }
       		add(
       			$current, 
       			"initExpressions",
        		lv_initExpressions_5_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpressionOrVarDeclaration");
	        afterParserOrEnumRuleCall();
	    }

)
))*)?	otherlv_6=';' 
    {
    	newLeafNode(otherlv_6, grammarAccess.getXBasicForLoopExpressionAccess().getSemicolonKeyword_4());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXBasicForLoopExpressionAccess().getExpressionXExpressionParserRuleCall_5_0()); 
	    }
		lv_expression_7_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXBasicForLoopExpressionRule());
	        }
       		set(
       			$current, 
       			"expression",
        		lv_expression_7_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
)?	otherlv_8=';' 
    {
    	newLeafNode(otherlv_8, grammarAccess.getXBasicForLoopExpressionAccess().getSemicolonKeyword_6());
    }
((
(
		{ 
	        newCompositeNode(grammarAccess.getXBasicForLoopExpressionAccess().getUpdateExpressionsXExpressionParserRuleCall_7_0_0()); 
	    }
		lv_updateExpressions_9_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXBasicForLoopExpressionRule());
	        }
       		add(
       			$current, 
       			"updateExpressions",
        		lv_updateExpressions_9_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
)(	otherlv_10=',' 
    {
    	newLeafNode(otherlv_10, grammarAccess.getXBasicForLoopExpressionAccess().getCommaKeyword_7_1_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXBasicForLoopExpressionAccess().getUpdateExpressionsXExpressionParserRuleCall_7_1_1_0()); 
	    }
		lv_updateExpressions_11_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXBasicForLoopExpressionRule());
	        }
       		add(
       			$current, 
       			"updateExpressions",
        		lv_updateExpressions_11_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
))*)?	otherlv_12=')' 
    {
    	newLeafNode(otherlv_12, grammarAccess.getXBasicForLoopExpressionAccess().getRightParenthesisKeyword_8());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXBasicForLoopExpressionAccess().getEachExpressionXExpressionParserRuleCall_9_0()); 
	    }
		lv_eachExpression_13_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXBasicForLoopExpressionRule());
	        }
       		set(
       			$current, 
       			"eachExpression",
        		lv_eachExpression_13_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
))
;





// Entry rule entryRuleXWhileExpression
entryRuleXWhileExpression returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXWhileExpressionRule()); }
	 iv_ruleXWhileExpression=ruleXWhileExpression 
	 { $current=$iv_ruleXWhileExpression.current; } 
	 EOF 
;

// Rule XWhileExpression
ruleXWhileExpression returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
    {
        $current = forceCreateModelElement(
            grammarAccess.getXWhileExpressionAccess().getXWhileExpressionAction_0(),
            $current);
    }
)	otherlv_1='while' 
    {
    	newLeafNode(otherlv_1, grammarAccess.getXWhileExpressionAccess().getWhileKeyword_1());
    }
	otherlv_2='(' 
    {
    	newLeafNode(otherlv_2, grammarAccess.getXWhileExpressionAccess().getLeftParenthesisKeyword_2());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXWhileExpressionAccess().getPredicateXExpressionParserRuleCall_3_0()); 
	    }
		lv_predicate_3_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXWhileExpressionRule());
	        }
       		set(
       			$current, 
       			"predicate",
        		lv_predicate_3_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
)	otherlv_4=')' 
    {
    	newLeafNode(otherlv_4, grammarAccess.getXWhileExpressionAccess().getRightParenthesisKeyword_4());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXWhileExpressionAccess().getBodyXExpressionParserRuleCall_5_0()); 
	    }
		lv_body_5_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXWhileExpressionRule());
	        }
       		set(
       			$current, 
       			"body",
        		lv_body_5_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
))
;





// Entry rule entryRuleXDoWhileExpression
entryRuleXDoWhileExpression returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXDoWhileExpressionRule()); }
	 iv_ruleXDoWhileExpression=ruleXDoWhileExpression 
	 { $current=$iv_ruleXDoWhileExpression.current; } 
	 EOF 
;

// Rule XDoWhileExpression
ruleXDoWhileExpression returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
    {
        $current = forceCreateModelElement(
            grammarAccess.getXDoWhileExpressionAccess().getXDoWhileExpressionAction_0(),
            $current);
    }
)	otherlv_1='do' 
    {
    	newLeafNode(otherlv_1, grammarAccess.getXDoWhileExpressionAccess().getDoKeyword_1());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXDoWhileExpressionAccess().getBodyXExpressionParserRuleCall_2_0()); 
	    }
		lv_body_2_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXDoWhileExpressionRule());
	        }
       		set(
       			$current, 
       			"body",
        		lv_body_2_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
)	otherlv_3='while' 
    {
    	newLeafNode(otherlv_3, grammarAccess.getXDoWhileExpressionAccess().getWhileKeyword_3());
    }
	otherlv_4='(' 
    {
    	newLeafNode(otherlv_4, grammarAccess.getXDoWhileExpressionAccess().getLeftParenthesisKeyword_4());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXDoWhileExpressionAccess().getPredicateXExpressionParserRuleCall_5_0()); 
	    }
		lv_predicate_5_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXDoWhileExpressionRule());
	        }
       		set(
       			$current, 
       			"predicate",
        		lv_predicate_5_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
)	otherlv_6=')' 
    {
    	newLeafNode(otherlv_6, grammarAccess.getXDoWhileExpressionAccess().getRightParenthesisKeyword_6());
    }
)
;





// Entry rule entryRuleXExpressionOrVarDeclaration
entryRuleXExpressionOrVarDeclaration returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXExpressionOrVarDeclarationRule()); }
	 iv_ruleXExpressionOrVarDeclaration=ruleXExpressionOrVarDeclaration 
	 { $current=$iv_ruleXExpressionOrVarDeclaration.current; } 
	 EOF 
;

// Rule XExpressionOrVarDeclaration
ruleXExpressionOrVarDeclaration returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(
    { 
        newCompositeNode(grammarAccess.getXExpressionOrVarDeclarationAccess().getXVariableDeclarationParserRuleCall_0()); 
    }
    this_XVariableDeclaration_0=ruleXVariableDeclaration
    { 
        $current = $this_XVariableDeclaration_0.current; 
        afterParserOrEnumRuleCall();
    }

    |
    { 
        newCompositeNode(grammarAccess.getXExpressionOrVarDeclarationAccess().getXExpressionParserRuleCall_1()); 
    }
    this_XExpression_1=ruleXExpression
    { 
        $current = $this_XExpression_1.current; 
        afterParserOrEnumRuleCall();
    }
)
;





// Entry rule entryRuleXVariableDeclaration
entryRuleXVariableDeclaration returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXVariableDeclarationRule()); }
	 iv_ruleXVariableDeclaration=ruleXVariableDeclaration 
	 { $current=$iv_ruleXVariableDeclaration.current; } 
	 EOF 
;

// Rule XVariableDeclaration
ruleXVariableDeclaration returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
    {
        $current = forceCreateModelElement(
            grammarAccess.getXVariableDeclarationAccess().getXVariableDeclarationAction_0(),
            $current);
    }
)((
(
		lv_writeable_1_0=	'var' 
    {
        newLeafNode(lv_writeable_1_0, grammarAccess.getXVariableDeclarationAccess().getWriteableVarKeyword_1_0_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXVariableDeclarationRule());
	        }
       		setWithLastConsumed($current, "writeable", true, "var");
	    }

)
)
    |	otherlv_2='val' 
    {
    	newLeafNode(otherlv_2, grammarAccess.getXVariableDeclarationAccess().getValKeyword_1_1());
    }
)(((((
(
ruleJvmTypeReference
)
)(
(
ruleValidID
)
)))=>((
(
		{ 
	        newCompositeNode(grammarAccess.getXVariableDeclarationAccess().getTypeJvmTypeReferenceParserRuleCall_2_0_0_0_0()); 
	    }
		lv_type_3_0=ruleJvmTypeReference		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXVariableDeclarationRule());
	        }
       		set(
       			$current, 
       			"type",
        		lv_type_3_0, 
        		"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
	        afterParserOrEnumRuleCall();
	    }

)
)(
(
		{ 
	        newCompositeNode(grammarAccess.getXVariableDeclarationAccess().getNameValidIDParserRuleCall_2_0_0_1_0()); 
	    }
		lv_name_4_0=ruleValidID		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXVariableDeclarationRule());
	        }
       		set(
       			$current, 
       			"name",
        		lv_name_4_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.ValidID");
	        afterParserOrEnumRuleCall();
	    }

)
)))
    |(
(
		{ 
	        newCompositeNode(grammarAccess.getXVariableDeclarationAccess().getNameValidIDParserRuleCall_2_1_0()); 
	    }
		lv_name_5_0=ruleValidID		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXVariableDeclarationRule());
	        }
       		set(
       			$current, 
       			"name",
        		lv_name_5_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.ValidID");
	        afterParserOrEnumRuleCall();
	    }

)
))(	otherlv_6='=' 
    {
    	newLeafNode(otherlv_6, grammarAccess.getXVariableDeclarationAccess().getEqualsSignKeyword_3_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXVariableDeclarationAccess().getRightXExpressionParserRuleCall_3_1_0()); 
	    }
		lv_right_7_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXVariableDeclarationRule());
	        }
       		set(
       			$current, 
       			"right",
        		lv_right_7_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
))?)
;





// Entry rule entryRuleJvmFormalParameter
entryRuleJvmFormalParameter returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getJvmFormalParameterRule()); }
	 iv_ruleJvmFormalParameter=ruleJvmFormalParameter 
	 { $current=$iv_ruleJvmFormalParameter.current; } 
	 EOF 
;

// Rule JvmFormalParameter
ruleJvmFormalParameter returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
(
		{ 
	        newCompositeNode(grammarAccess.getJvmFormalParameterAccess().getParameterTypeJvmTypeReferenceParserRuleCall_0_0()); 
	    }
		lv_parameterType_0_0=ruleJvmTypeReference		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getJvmFormalParameterRule());
	        }
       		set(
       			$current, 
       			"parameterType",
        		lv_parameterType_0_0, 
        		"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
	        afterParserOrEnumRuleCall();
	    }

)
)?(
(
		{ 
	        newCompositeNode(grammarAccess.getJvmFormalParameterAccess().getNameValidIDParserRuleCall_1_0()); 
	    }
		lv_name_1_0=ruleValidID		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getJvmFormalParameterRule());
	        }
       		set(
       			$current, 
       			"name",
        		lv_name_1_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.ValidID");
	        afterParserOrEnumRuleCall();
	    }

)
))
;





// Entry rule entryRuleFullJvmFormalParameter
entryRuleFullJvmFormalParameter returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getFullJvmFormalParameterRule()); }
	 iv_ruleFullJvmFormalParameter=ruleFullJvmFormalParameter 
	 { $current=$iv_ruleFullJvmFormalParameter.current; } 
	 EOF 
;

// Rule FullJvmFormalParameter
ruleFullJvmFormalParameter returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
(
		{ 
	        newCompositeNode(grammarAccess.getFullJvmFormalParameterAccess().getParameterTypeJvmTypeReferenceParserRuleCall_0_0()); 
	    }
		lv_parameterType_0_0=ruleJvmTypeReference		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getFullJvmFormalParameterRule());
	        }
       		set(
       			$current, 
       			"parameterType",
        		lv_parameterType_0_0, 
        		"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
	        afterParserOrEnumRuleCall();
	    }

)
)(
(
		{ 
	        newCompositeNode(grammarAccess.getFullJvmFormalParameterAccess().getNameValidIDParserRuleCall_1_0()); 
	    }
		lv_name_1_0=ruleValidID		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getFullJvmFormalParameterRule());
	        }
       		set(
       			$current, 
       			"name",
        		lv_name_1_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.ValidID");
	        afterParserOrEnumRuleCall();
	    }

)
))
;





// Entry rule entryRuleXFeatureCall
entryRuleXFeatureCall returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXFeatureCallRule()); }
	 iv_ruleXFeatureCall=ruleXFeatureCall 
	 { $current=$iv_ruleXFeatureCall.current; } 
	 EOF 
;

// Rule XFeatureCall
ruleXFeatureCall returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
    {
        $current = forceCreateModelElement(
            grammarAccess.getXFeatureCallAccess().getXFeatureCallAction_0(),
            $current);
    }
)(	otherlv_1='<' 
    {
    	newLeafNode(otherlv_1, grammarAccess.getXFeatureCallAccess().getLessThanSignKeyword_1_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXFeatureCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_1_1_0()); 
	    }
		lv_typeArguments_2_0=ruleJvmArgumentTypeReference		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXFeatureCallRule());
	        }
       		add(
       			$current, 
       			"typeArguments",
        		lv_typeArguments_2_0, 
        		"org.eclipse.xtext.xbase.Xtype.JvmArgumentTypeReference");
	        afterParserOrEnumRuleCall();
	    }

)
)(	otherlv_3=',' 
    {
    	newLeafNode(otherlv_3, grammarAccess.getXFeatureCallAccess().getCommaKeyword_1_2_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXFeatureCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_1_2_1_0()); 
	    }
		lv_typeArguments_4_0=ruleJvmArgumentTypeReference		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXFeatureCallRule());
	        }
       		add(
       			$current, 
       			"typeArguments",
        		lv_typeArguments_4_0, 
        		"org.eclipse.xtext.xbase.Xtype.JvmArgumentTypeReference");
	        afterParserOrEnumRuleCall();
	    }

)
))*	otherlv_5='>' 
    {
    	newLeafNode(otherlv_5, grammarAccess.getXFeatureCallAccess().getGreaterThanSignKeyword_1_3());
    }
)?(
(
		{
			if ($current==null) {
	            $current = createModelElement(grammarAccess.getXFeatureCallRule());
	        }
        }
		{ 
	        newCompositeNode(grammarAccess.getXFeatureCallAccess().getFeatureJvmIdentifiableElementCrossReference_2_0()); 
	    }
		ruleIdOrSuper		{ 
	        afterParserOrEnumRuleCall();
	    }

)
)(((
(
	'(' 
 

)
)=>
(
		lv_explicitOperationCall_7_0=	'(' 
    {
        newLeafNode(lv_explicitOperationCall_7_0, grammarAccess.getXFeatureCallAccess().getExplicitOperationCallLeftParenthesisKeyword_3_0_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXFeatureCallRule());
	        }
       		setWithLastConsumed($current, "explicitOperationCall", true, "(");
	    }

)
)(((((
)((
(
ruleJvmFormalParameter
)
)(	',' 
(
(
ruleJvmFormalParameter
)
))*)?(
(
	'|' 
 

)
)))=>
(
		{ 
	        newCompositeNode(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsXShortClosureParserRuleCall_3_1_0_0()); 
	    }
		lv_featureCallArguments_8_0=ruleXShortClosure		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXFeatureCallRule());
	        }
       		add(
       			$current, 
       			"featureCallArguments",
        		lv_featureCallArguments_8_0, 
        		"org.eclipse.xtext.xbase.Xbase.XShortClosure");
	        afterParserOrEnumRuleCall();
	    }

)
)
    |((
(
		{ 
	        newCompositeNode(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsXExpressionParserRuleCall_3_1_1_0_0()); 
	    }
		lv_featureCallArguments_9_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXFeatureCallRule());
	        }
       		add(
       			$current, 
       			"featureCallArguments",
        		lv_featureCallArguments_9_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
)(	otherlv_10=',' 
    {
    	newLeafNode(otherlv_10, grammarAccess.getXFeatureCallAccess().getCommaKeyword_3_1_1_1_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsXExpressionParserRuleCall_3_1_1_1_1_0()); 
	    }
		lv_featureCallArguments_11_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXFeatureCallRule());
	        }
       		add(
       			$current, 
       			"featureCallArguments",
        		lv_featureCallArguments_11_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
))*))?	otherlv_12=')' 
    {
    	newLeafNode(otherlv_12, grammarAccess.getXFeatureCallAccess().getRightParenthesisKeyword_3_2());
    }
)?((((
)	'[' 
))=>
(
		{ 
	        newCompositeNode(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsXClosureParserRuleCall_4_0()); 
	    }
		lv_featureCallArguments_13_0=ruleXClosure		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXFeatureCallRule());
	        }
       		add(
       			$current, 
       			"featureCallArguments",
        		lv_featureCallArguments_13_0, 
        		"org.eclipse.xtext.xbase.Xbase.XClosure");
	        afterParserOrEnumRuleCall();
	    }

)
)?)
;





// Entry rule entryRuleIdOrSuper
entryRuleIdOrSuper returns [String current=null] 
	:
	{ newCompositeNode(grammarAccess.getIdOrSuperRule()); } 
	 iv_ruleIdOrSuper=ruleIdOrSuper 
	 { $current=$iv_ruleIdOrSuper.current.getText(); }  
	 EOF 
;

// Rule IdOrSuper
ruleIdOrSuper returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(
    { 
        newCompositeNode(grammarAccess.getIdOrSuperAccess().getFeatureCallIDParserRuleCall_0()); 
    }
    this_FeatureCallID_0=ruleFeatureCallID    {
		$current.merge(this_FeatureCallID_0);
    }

    { 
        afterParserOrEnumRuleCall();
    }

    |
	kw='super' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getIdOrSuperAccess().getSuperKeyword_1()); 
    }
)
    ;





// Entry rule entryRuleXConstructorCall
entryRuleXConstructorCall returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXConstructorCallRule()); }
	 iv_ruleXConstructorCall=ruleXConstructorCall 
	 { $current=$iv_ruleXConstructorCall.current; } 
	 EOF 
;

// Rule XConstructorCall
ruleXConstructorCall returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
    {
        $current = forceCreateModelElement(
            grammarAccess.getXConstructorCallAccess().getXConstructorCallAction_0(),
            $current);
    }
)	otherlv_1='new' 
    {
    	newLeafNode(otherlv_1, grammarAccess.getXConstructorCallAccess().getNewKeyword_1());
    }
(
(
		{
			if ($current==null) {
	            $current = createModelElement(grammarAccess.getXConstructorCallRule());
	        }
        }
		{ 
	        newCompositeNode(grammarAccess.getXConstructorCallAccess().getConstructorJvmConstructorCrossReference_2_0()); 
	    }
		ruleQualifiedName		{ 
	        afterParserOrEnumRuleCall();
	    }

)
)(((	'<' 
)=>	otherlv_3='<' 
    {
    	newLeafNode(otherlv_3, grammarAccess.getXConstructorCallAccess().getLessThanSignKeyword_3_0());
    }
)(
(
		{ 
	        newCompositeNode(grammarAccess.getXConstructorCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_3_1_0()); 
	    }
		lv_typeArguments_4_0=ruleJvmArgumentTypeReference		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXConstructorCallRule());
	        }
       		add(
       			$current, 
       			"typeArguments",
        		lv_typeArguments_4_0, 
        		"org.eclipse.xtext.xbase.Xtype.JvmArgumentTypeReference");
	        afterParserOrEnumRuleCall();
	    }

)
)(	otherlv_5=',' 
    {
    	newLeafNode(otherlv_5, grammarAccess.getXConstructorCallAccess().getCommaKeyword_3_2_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXConstructorCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_3_2_1_0()); 
	    }
		lv_typeArguments_6_0=ruleJvmArgumentTypeReference		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXConstructorCallRule());
	        }
       		add(
       			$current, 
       			"typeArguments",
        		lv_typeArguments_6_0, 
        		"org.eclipse.xtext.xbase.Xtype.JvmArgumentTypeReference");
	        afterParserOrEnumRuleCall();
	    }

)
))*	otherlv_7='>' 
    {
    	newLeafNode(otherlv_7, grammarAccess.getXConstructorCallAccess().getGreaterThanSignKeyword_3_3());
    }
)?(((
(
	'(' 
 

)
)=>
(
		lv_explicitConstructorCall_8_0=	'(' 
    {
        newLeafNode(lv_explicitConstructorCall_8_0, grammarAccess.getXConstructorCallAccess().getExplicitConstructorCallLeftParenthesisKeyword_4_0_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXConstructorCallRule());
	        }
       		setWithLastConsumed($current, "explicitConstructorCall", true, "(");
	    }

)
)(((((
)((
(
ruleJvmFormalParameter
)
)(	',' 
(
(
ruleJvmFormalParameter
)
))*)?(
(
	'|' 
 

)
)))=>
(
		{ 
	        newCompositeNode(grammarAccess.getXConstructorCallAccess().getArgumentsXShortClosureParserRuleCall_4_1_0_0()); 
	    }
		lv_arguments_9_0=ruleXShortClosure		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXConstructorCallRule());
	        }
       		add(
       			$current, 
       			"arguments",
        		lv_arguments_9_0, 
        		"org.eclipse.xtext.xbase.Xbase.XShortClosure");
	        afterParserOrEnumRuleCall();
	    }

)
)
    |((
(
		{ 
	        newCompositeNode(grammarAccess.getXConstructorCallAccess().getArgumentsXExpressionParserRuleCall_4_1_1_0_0()); 
	    }
		lv_arguments_10_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXConstructorCallRule());
	        }
       		add(
       			$current, 
       			"arguments",
        		lv_arguments_10_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
)(	otherlv_11=',' 
    {
    	newLeafNode(otherlv_11, grammarAccess.getXConstructorCallAccess().getCommaKeyword_4_1_1_1_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXConstructorCallAccess().getArgumentsXExpressionParserRuleCall_4_1_1_1_1_0()); 
	    }
		lv_arguments_12_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXConstructorCallRule());
	        }
       		add(
       			$current, 
       			"arguments",
        		lv_arguments_12_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
))*))?	otherlv_13=')' 
    {
    	newLeafNode(otherlv_13, grammarAccess.getXConstructorCallAccess().getRightParenthesisKeyword_4_2());
    }
)?((((
)	'[' 
))=>
(
		{ 
	        newCompositeNode(grammarAccess.getXConstructorCallAccess().getArgumentsXClosureParserRuleCall_5_0()); 
	    }
		lv_arguments_14_0=ruleXClosure		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXConstructorCallRule());
	        }
       		add(
       			$current, 
       			"arguments",
        		lv_arguments_14_0, 
        		"org.eclipse.xtext.xbase.Xbase.XClosure");
	        afterParserOrEnumRuleCall();
	    }

)
)?)
;





// Entry rule entryRuleXBooleanLiteral
entryRuleXBooleanLiteral returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXBooleanLiteralRule()); }
	 iv_ruleXBooleanLiteral=ruleXBooleanLiteral 
	 { $current=$iv_ruleXBooleanLiteral.current; } 
	 EOF 
;

// Rule XBooleanLiteral
ruleXBooleanLiteral returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
    {
        $current = forceCreateModelElement(
            grammarAccess.getXBooleanLiteralAccess().getXBooleanLiteralAction_0(),
            $current);
    }
)(	otherlv_1='false' 
    {
    	newLeafNode(otherlv_1, grammarAccess.getXBooleanLiteralAccess().getFalseKeyword_1_0());
    }

    |(
(
		lv_isTrue_2_0=	'true' 
    {
        newLeafNode(lv_isTrue_2_0, grammarAccess.getXBooleanLiteralAccess().getIsTrueTrueKeyword_1_1_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXBooleanLiteralRule());
	        }
       		setWithLastConsumed($current, "isTrue", true, "true");
	    }

)
)))
;





// Entry rule entryRuleXNullLiteral
entryRuleXNullLiteral returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXNullLiteralRule()); }
	 iv_ruleXNullLiteral=ruleXNullLiteral 
	 { $current=$iv_ruleXNullLiteral.current; } 
	 EOF 
;

// Rule XNullLiteral
ruleXNullLiteral returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
    {
        $current = forceCreateModelElement(
            grammarAccess.getXNullLiteralAccess().getXNullLiteralAction_0(),
            $current);
    }
)	otherlv_1='null' 
    {
    	newLeafNode(otherlv_1, grammarAccess.getXNullLiteralAccess().getNullKeyword_1());
    }
)
;





// Entry rule entryRuleXNumberLiteral
entryRuleXNumberLiteral returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXNumberLiteralRule()); }
	 iv_ruleXNumberLiteral=ruleXNumberLiteral 
	 { $current=$iv_ruleXNumberLiteral.current; } 
	 EOF 
;

// Rule XNumberLiteral
ruleXNumberLiteral returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
    {
        $current = forceCreateModelElement(
            grammarAccess.getXNumberLiteralAccess().getXNumberLiteralAction_0(),
            $current);
    }
)(
(
		{ 
	        newCompositeNode(grammarAccess.getXNumberLiteralAccess().getValueNumberParserRuleCall_1_0()); 
	    }
		lv_value_1_0=ruleNumber		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXNumberLiteralRule());
	        }
       		set(
       			$current, 
       			"value",
        		lv_value_1_0, 
        		"org.eclipse.xtext.xbase.Xbase.Number");
	        afterParserOrEnumRuleCall();
	    }

)
))
;





// Entry rule entryRuleXStringLiteral
entryRuleXStringLiteral returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXStringLiteralRule()); }
	 iv_ruleXStringLiteral=ruleXStringLiteral 
	 { $current=$iv_ruleXStringLiteral.current; } 
	 EOF 
;

// Rule XStringLiteral
ruleXStringLiteral returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
    {
        $current = forceCreateModelElement(
            grammarAccess.getXStringLiteralAccess().getXStringLiteralAction_0(),
            $current);
    }
)(
(
		lv_value_1_0=RULE_STRING
		{
			newLeafNode(lv_value_1_0, grammarAccess.getXStringLiteralAccess().getValueSTRINGTerminalRuleCall_1_0()); 
		}
		{
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXStringLiteralRule());
	        }
       		setWithLastConsumed(
       			$current, 
       			"value",
        		lv_value_1_0, 
        		"org.eclipse.xtext.xbase.Xtype.STRING");
	    }

)
))
;





// Entry rule entryRuleXTypeLiteral
entryRuleXTypeLiteral returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXTypeLiteralRule()); }
	 iv_ruleXTypeLiteral=ruleXTypeLiteral 
	 { $current=$iv_ruleXTypeLiteral.current; } 
	 EOF 
;

// Rule XTypeLiteral
ruleXTypeLiteral returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
    {
        $current = forceCreateModelElement(
            grammarAccess.getXTypeLiteralAccess().getXTypeLiteralAction_0(),
            $current);
    }
)	otherlv_1='typeof' 
    {
    	newLeafNode(otherlv_1, grammarAccess.getXTypeLiteralAccess().getTypeofKeyword_1());
    }
	otherlv_2='(' 
    {
    	newLeafNode(otherlv_2, grammarAccess.getXTypeLiteralAccess().getLeftParenthesisKeyword_2());
    }
(
(
		{
			if ($current==null) {
	            $current = createModelElement(grammarAccess.getXTypeLiteralRule());
	        }
        }
		{ 
	        newCompositeNode(grammarAccess.getXTypeLiteralAccess().getTypeJvmTypeCrossReference_3_0()); 
	    }
		ruleQualifiedName		{ 
	        afterParserOrEnumRuleCall();
	    }

)
)(
(
		{ 
	        newCompositeNode(grammarAccess.getXTypeLiteralAccess().getArrayDimensionsArrayBracketsParserRuleCall_4_0()); 
	    }
		lv_arrayDimensions_4_0=ruleArrayBrackets		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXTypeLiteralRule());
	        }
       		add(
       			$current, 
       			"arrayDimensions",
        		lv_arrayDimensions_4_0, 
        		"org.eclipse.xtext.xbase.Xtype.ArrayBrackets");
	        afterParserOrEnumRuleCall();
	    }

)
)*	otherlv_5=')' 
    {
    	newLeafNode(otherlv_5, grammarAccess.getXTypeLiteralAccess().getRightParenthesisKeyword_5());
    }
)
;





// Entry rule entryRuleXThrowExpression
entryRuleXThrowExpression returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXThrowExpressionRule()); }
	 iv_ruleXThrowExpression=ruleXThrowExpression 
	 { $current=$iv_ruleXThrowExpression.current; } 
	 EOF 
;

// Rule XThrowExpression
ruleXThrowExpression returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
    {
        $current = forceCreateModelElement(
            grammarAccess.getXThrowExpressionAccess().getXThrowExpressionAction_0(),
            $current);
    }
)	otherlv_1='throw' 
    {
    	newLeafNode(otherlv_1, grammarAccess.getXThrowExpressionAccess().getThrowKeyword_1());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXThrowExpressionAccess().getExpressionXExpressionParserRuleCall_2_0()); 
	    }
		lv_expression_2_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXThrowExpressionRule());
	        }
       		set(
       			$current, 
       			"expression",
        		lv_expression_2_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
))
;





// Entry rule entryRuleXReturnExpression
entryRuleXReturnExpression returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXReturnExpressionRule()); }
	 iv_ruleXReturnExpression=ruleXReturnExpression 
	 { $current=$iv_ruleXReturnExpression.current; } 
	 EOF 
;

// Rule XReturnExpression
ruleXReturnExpression returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
    {
        $current = forceCreateModelElement(
            grammarAccess.getXReturnExpressionAccess().getXReturnExpressionAction_0(),
            $current);
    }
)	otherlv_1='return' 
    {
    	newLeafNode(otherlv_1, grammarAccess.getXReturnExpressionAccess().getReturnKeyword_1());
    }
((	'get' 
 | 	'isSet' 
 | 	'set' 
 | 	'unset' 
 | 	'void' 
 | 	'abstract' 
 | 	'annotation' 
 | 	'as' 
 | 	'class' 
 | 	'container' 
 | 	'contains' 
 | 	'convert' 
 | 	'create' 
 | 	'derived' 
 | 	'enum' 
 | 	'extends' 
 | 	'extension' 
 | 	'id' 
 | 	'import' 
 | 	'keys' 
 | 	'interface' 
 | 	'local' 
 | 	'op' 
 | 	'opposite' 
 | 	'package' 
 | 	'readonly' 
 | 	'refers' 
 | 	'resolving' 
 | 	'static' 
 | 	'throws' 
 | 	'transient' 
 | 	'unique' 
 | 	'unordered' 
 | 	'unsettable' 
 | 	'volatile' 
 | 	'wraps' 
 | 	'!' 
 | 	'-' 
 | 	'+' 
 | 	'new' 
 | 	'{' 
 | 	'switch' 
 | 	'synchronized' 
 | 	'<' 
 | 	'super' 
 | 	'#' 
 | 	'[' 
 | 	'false' 
 | 	'true' 
 | 	'null' 
 | 	'typeof' 
 | 	'if' 
 | 	'for' 
 | 	'while' 
 | 	'do' 
 | 	'throw' 
 | 	'return' 
 | 	'try' 
 | 	'(' 
 | 	RULE_ID | 	RULE_HEX | 	RULE_INT | 	RULE_DECIMAL | 	RULE_STRING)=>
(
		{ 
	        newCompositeNode(grammarAccess.getXReturnExpressionAccess().getExpressionXExpressionParserRuleCall_2_0()); 
	    }
		lv_expression_2_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXReturnExpressionRule());
	        }
       		set(
       			$current, 
       			"expression",
        		lv_expression_2_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
)?)
;





// Entry rule entryRuleXTryCatchFinallyExpression
entryRuleXTryCatchFinallyExpression returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXTryCatchFinallyExpressionRule()); }
	 iv_ruleXTryCatchFinallyExpression=ruleXTryCatchFinallyExpression 
	 { $current=$iv_ruleXTryCatchFinallyExpression.current; } 
	 EOF 
;

// Rule XTryCatchFinallyExpression
ruleXTryCatchFinallyExpression returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
    {
        $current = forceCreateModelElement(
            grammarAccess.getXTryCatchFinallyExpressionAccess().getXTryCatchFinallyExpressionAction_0(),
            $current);
    }
)	otherlv_1='try' 
    {
    	newLeafNode(otherlv_1, grammarAccess.getXTryCatchFinallyExpressionAccess().getTryKeyword_1());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXTryCatchFinallyExpressionAccess().getExpressionXExpressionParserRuleCall_2_0()); 
	    }
		lv_expression_2_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXTryCatchFinallyExpressionRule());
	        }
       		set(
       			$current, 
       			"expression",
        		lv_expression_2_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
)((((	'catch' 
)=>
(
		{ 
	        newCompositeNode(grammarAccess.getXTryCatchFinallyExpressionAccess().getCatchClausesXCatchClauseParserRuleCall_3_0_0_0()); 
	    }
		lv_catchClauses_3_0=ruleXCatchClause		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXTryCatchFinallyExpressionRule());
	        }
       		add(
       			$current, 
       			"catchClauses",
        		lv_catchClauses_3_0, 
        		"org.eclipse.xtext.xbase.Xbase.XCatchClause");
	        afterParserOrEnumRuleCall();
	    }

)
)+(((	'finally' 
)=>	otherlv_4='finally' 
    {
    	newLeafNode(otherlv_4, grammarAccess.getXTryCatchFinallyExpressionAccess().getFinallyKeyword_3_0_1_0());
    }
)(
(
		{ 
	        newCompositeNode(grammarAccess.getXTryCatchFinallyExpressionAccess().getFinallyExpressionXExpressionParserRuleCall_3_0_1_1_0()); 
	    }
		lv_finallyExpression_5_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXTryCatchFinallyExpressionRule());
	        }
       		set(
       			$current, 
       			"finallyExpression",
        		lv_finallyExpression_5_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
))?)
    |(	otherlv_6='finally' 
    {
    	newLeafNode(otherlv_6, grammarAccess.getXTryCatchFinallyExpressionAccess().getFinallyKeyword_3_1_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXTryCatchFinallyExpressionAccess().getFinallyExpressionXExpressionParserRuleCall_3_1_1_0()); 
	    }
		lv_finallyExpression_7_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXTryCatchFinallyExpressionRule());
	        }
       		set(
       			$current, 
       			"finallyExpression",
        		lv_finallyExpression_7_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
))))
;





// Entry rule entryRuleXSynchronizedExpression
entryRuleXSynchronizedExpression returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXSynchronizedExpressionRule()); }
	 iv_ruleXSynchronizedExpression=ruleXSynchronizedExpression 
	 { $current=$iv_ruleXSynchronizedExpression.current; } 
	 EOF 
;

// Rule XSynchronizedExpression
ruleXSynchronizedExpression returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(((((
)	'synchronized' 
	'(' 
))=>((
    {
        $current = forceCreateModelElement(
            grammarAccess.getXSynchronizedExpressionAccess().getXSynchronizedExpressionAction_0_0_0(),
            $current);
    }
)	otherlv_1='synchronized' 
    {
    	newLeafNode(otherlv_1, grammarAccess.getXSynchronizedExpressionAccess().getSynchronizedKeyword_0_0_1());
    }
	otherlv_2='(' 
    {
    	newLeafNode(otherlv_2, grammarAccess.getXSynchronizedExpressionAccess().getLeftParenthesisKeyword_0_0_2());
    }
))(
(
		{ 
	        newCompositeNode(grammarAccess.getXSynchronizedExpressionAccess().getParamXExpressionParserRuleCall_1_0()); 
	    }
		lv_param_3_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXSynchronizedExpressionRule());
	        }
       		set(
       			$current, 
       			"param",
        		lv_param_3_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
)	otherlv_4=')' 
    {
    	newLeafNode(otherlv_4, grammarAccess.getXSynchronizedExpressionAccess().getRightParenthesisKeyword_2());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXSynchronizedExpressionAccess().getExpressionXExpressionParserRuleCall_3_0()); 
	    }
		lv_expression_5_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXSynchronizedExpressionRule());
	        }
       		set(
       			$current, 
       			"expression",
        		lv_expression_5_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
))
;





// Entry rule entryRuleXCatchClause
entryRuleXCatchClause returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXCatchClauseRule()); }
	 iv_ruleXCatchClause=ruleXCatchClause 
	 { $current=$iv_ruleXCatchClause.current; } 
	 EOF 
;

// Rule XCatchClause
ruleXCatchClause returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(((	'catch' 
)=>	otherlv_0='catch' 
    {
    	newLeafNode(otherlv_0, grammarAccess.getXCatchClauseAccess().getCatchKeyword_0());
    }
)	otherlv_1='(' 
    {
    	newLeafNode(otherlv_1, grammarAccess.getXCatchClauseAccess().getLeftParenthesisKeyword_1());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXCatchClauseAccess().getDeclaredParamFullJvmFormalParameterParserRuleCall_2_0()); 
	    }
		lv_declaredParam_2_0=ruleFullJvmFormalParameter		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXCatchClauseRule());
	        }
       		set(
       			$current, 
       			"declaredParam",
        		lv_declaredParam_2_0, 
        		"org.eclipse.xtext.xbase.Xbase.FullJvmFormalParameter");
	        afterParserOrEnumRuleCall();
	    }

)
)	otherlv_3=')' 
    {
    	newLeafNode(otherlv_3, grammarAccess.getXCatchClauseAccess().getRightParenthesisKeyword_3());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXCatchClauseAccess().getExpressionXExpressionParserRuleCall_4_0()); 
	    }
		lv_expression_4_0=ruleXExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXCatchClauseRule());
	        }
       		set(
       			$current, 
       			"expression",
        		lv_expression_4_0, 
        		"org.eclipse.xtext.xbase.Xbase.XExpression");
	        afterParserOrEnumRuleCall();
	    }

)
))
;





// Entry rule entryRuleQualifiedName
entryRuleQualifiedName returns [String current=null] 
	:
	{ newCompositeNode(grammarAccess.getQualifiedNameRule()); } 
	 iv_ruleQualifiedName=ruleQualifiedName 
	 { $current=$iv_ruleQualifiedName.current.getText(); }  
	 EOF 
;

// Rule QualifiedName
ruleQualifiedName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(
    { 
        newCompositeNode(grammarAccess.getQualifiedNameAccess().getValidIDParserRuleCall_0()); 
    }
    this_ValidID_0=ruleValidID    {
		$current.merge(this_ValidID_0);
    }

    { 
        afterParserOrEnumRuleCall();
    }
(((
	'.' 
)=>
	kw='.' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getQualifiedNameAccess().getFullStopKeyword_1_0()); 
    }
)
    { 
        newCompositeNode(grammarAccess.getQualifiedNameAccess().getValidIDParserRuleCall_1_1()); 
    }
    this_ValidID_2=ruleValidID    {
		$current.merge(this_ValidID_2);
    }

    { 
        afterParserOrEnumRuleCall();
    }
)*)
    ;





// Entry rule entryRuleNumber
entryRuleNumber returns [String current=null] 
	@init { 
		HiddenTokens myHiddenTokenState = ((XtextTokenStream)input).setHiddenTokens();
	}
	:
	{ newCompositeNode(grammarAccess.getNumberRule()); } 
	 iv_ruleNumber=ruleNumber 
	 { $current=$iv_ruleNumber.current.getText(); }  
	 EOF 
;
finally {
	myHiddenTokenState.restore();
}

// Rule Number
ruleNumber returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
    @init { enterRule(); 
		HiddenTokens myHiddenTokenState = ((XtextTokenStream)input).setHiddenTokens();
    }
    @after { leaveRule(); }:
(    this_HEX_0=RULE_HEX    {
		$current.merge(this_HEX_0);
    }

    { 
    newLeafNode(this_HEX_0, grammarAccess.getNumberAccess().getHEXTerminalRuleCall_0()); 
    }

    |((    this_INT_1=RULE_INT    {
		$current.merge(this_INT_1);
    }

    { 
    newLeafNode(this_INT_1, grammarAccess.getNumberAccess().getINTTerminalRuleCall_1_0_0()); 
    }

    |    this_DECIMAL_2=RULE_DECIMAL    {
		$current.merge(this_DECIMAL_2);
    }

    { 
    newLeafNode(this_DECIMAL_2, grammarAccess.getNumberAccess().getDECIMALTerminalRuleCall_1_0_1()); 
    }
)(
	kw='.' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getNumberAccess().getFullStopKeyword_1_1_0()); 
    }
(    this_INT_4=RULE_INT    {
		$current.merge(this_INT_4);
    }

    { 
    newLeafNode(this_INT_4, grammarAccess.getNumberAccess().getINTTerminalRuleCall_1_1_1_0()); 
    }

    |    this_DECIMAL_5=RULE_DECIMAL    {
		$current.merge(this_DECIMAL_5);
    }

    { 
    newLeafNode(this_DECIMAL_5, grammarAccess.getNumberAccess().getDECIMALTerminalRuleCall_1_1_1_1()); 
    }
))?))
    ;
finally {
	myHiddenTokenState.restore();
}







// Entry rule entryRuleJvmTypeReference
entryRuleJvmTypeReference returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getJvmTypeReferenceRule()); }
	 iv_ruleJvmTypeReference=ruleJvmTypeReference 
	 { $current=$iv_ruleJvmTypeReference.current; } 
	 EOF 
;

// Rule JvmTypeReference
ruleJvmTypeReference returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
    { 
        newCompositeNode(grammarAccess.getJvmTypeReferenceAccess().getJvmParameterizedTypeReferenceParserRuleCall_0_0()); 
    }
    this_JvmParameterizedTypeReference_0=ruleJvmParameterizedTypeReference
    { 
        $current = $this_JvmParameterizedTypeReference_0.current; 
        afterParserOrEnumRuleCall();
    }
((((
)	ruleArrayBrackets))=>((
    {
        $current = forceCreateModelElementAndSet(
            grammarAccess.getJvmTypeReferenceAccess().getJvmGenericArrayTypeReferenceComponentTypeAction_0_1_0_0(),
            $current);
    }
)
    { 
        newCompositeNode(grammarAccess.getJvmTypeReferenceAccess().getArrayBracketsParserRuleCall_0_1_0_1()); 
    }
ruleArrayBrackets
    { 
        afterParserOrEnumRuleCall();
    }
))*)
    |
    { 
        newCompositeNode(grammarAccess.getJvmTypeReferenceAccess().getXFunctionTypeRefParserRuleCall_1()); 
    }
    this_XFunctionTypeRef_3=ruleXFunctionTypeRef
    { 
        $current = $this_XFunctionTypeRef_3.current; 
        afterParserOrEnumRuleCall();
    }
)
;





// Entry rule entryRuleArrayBrackets
entryRuleArrayBrackets returns [String current=null] 
	:
	{ newCompositeNode(grammarAccess.getArrayBracketsRule()); } 
	 iv_ruleArrayBrackets=ruleArrayBrackets 
	 { $current=$iv_ruleArrayBrackets.current.getText(); }  
	 EOF 
;

// Rule ArrayBrackets
ruleArrayBrackets returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(
	kw='[' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getArrayBracketsAccess().getLeftSquareBracketKeyword_0()); 
    }

	kw=']' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getArrayBracketsAccess().getRightSquareBracketKeyword_1()); 
    }
)
    ;





// Entry rule entryRuleXFunctionTypeRef
entryRuleXFunctionTypeRef returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXFunctionTypeRefRule()); }
	 iv_ruleXFunctionTypeRef=ruleXFunctionTypeRef 
	 { $current=$iv_ruleXFunctionTypeRef.current; } 
	 EOF 
;

// Rule XFunctionTypeRef
ruleXFunctionTypeRef returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((	otherlv_0='(' 
    {
    	newLeafNode(otherlv_0, grammarAccess.getXFunctionTypeRefAccess().getLeftParenthesisKeyword_0_0());
    }
((
(
		{ 
	        newCompositeNode(grammarAccess.getXFunctionTypeRefAccess().getParamTypesJvmTypeReferenceParserRuleCall_0_1_0_0()); 
	    }
		lv_paramTypes_1_0=ruleJvmTypeReference		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXFunctionTypeRefRule());
	        }
       		add(
       			$current, 
       			"paramTypes",
        		lv_paramTypes_1_0, 
        		"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
	        afterParserOrEnumRuleCall();
	    }

)
)(	otherlv_2=',' 
    {
    	newLeafNode(otherlv_2, grammarAccess.getXFunctionTypeRefAccess().getCommaKeyword_0_1_1_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXFunctionTypeRefAccess().getParamTypesJvmTypeReferenceParserRuleCall_0_1_1_1_0()); 
	    }
		lv_paramTypes_3_0=ruleJvmTypeReference		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXFunctionTypeRefRule());
	        }
       		add(
       			$current, 
       			"paramTypes",
        		lv_paramTypes_3_0, 
        		"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
	        afterParserOrEnumRuleCall();
	    }

)
))*)?	otherlv_4=')' 
    {
    	newLeafNode(otherlv_4, grammarAccess.getXFunctionTypeRefAccess().getRightParenthesisKeyword_0_2());
    }
)?	otherlv_5='=>' 
    {
    	newLeafNode(otherlv_5, grammarAccess.getXFunctionTypeRefAccess().getEqualsSignGreaterThanSignKeyword_1());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getXFunctionTypeRefAccess().getReturnTypeJvmTypeReferenceParserRuleCall_2_0()); 
	    }
		lv_returnType_6_0=ruleJvmTypeReference		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXFunctionTypeRefRule());
	        }
       		set(
       			$current, 
       			"returnType",
        		lv_returnType_6_0, 
        		"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
	        afterParserOrEnumRuleCall();
	    }

)
))
;





// Entry rule entryRuleJvmParameterizedTypeReference
entryRuleJvmParameterizedTypeReference returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getJvmParameterizedTypeReferenceRule()); }
	 iv_ruleJvmParameterizedTypeReference=ruleJvmParameterizedTypeReference 
	 { $current=$iv_ruleJvmParameterizedTypeReference.current; } 
	 EOF 
;

// Rule JvmParameterizedTypeReference
ruleJvmParameterizedTypeReference returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
(
		{
			if ($current==null) {
	            $current = createModelElement(grammarAccess.getJvmParameterizedTypeReferenceRule());
	        }
        }
		{ 
	        newCompositeNode(grammarAccess.getJvmParameterizedTypeReferenceAccess().getTypeJvmTypeCrossReference_0_0()); 
	    }
		ruleQualifiedName		{ 
	        afterParserOrEnumRuleCall();
	    }

)
)(((	'<' 
)=>	otherlv_1='<' 
    {
    	newLeafNode(otherlv_1, grammarAccess.getJvmParameterizedTypeReferenceAccess().getLessThanSignKeyword_1_0());
    }
)(
(
		{ 
	        newCompositeNode(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsJvmArgumentTypeReferenceParserRuleCall_1_1_0()); 
	    }
		lv_arguments_2_0=ruleJvmArgumentTypeReference		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getJvmParameterizedTypeReferenceRule());
	        }
       		add(
       			$current, 
       			"arguments",
        		lv_arguments_2_0, 
        		"org.eclipse.xtext.xbase.Xtype.JvmArgumentTypeReference");
	        afterParserOrEnumRuleCall();
	    }

)
)(	otherlv_3=',' 
    {
    	newLeafNode(otherlv_3, grammarAccess.getJvmParameterizedTypeReferenceAccess().getCommaKeyword_1_2_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsJvmArgumentTypeReferenceParserRuleCall_1_2_1_0()); 
	    }
		lv_arguments_4_0=ruleJvmArgumentTypeReference		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getJvmParameterizedTypeReferenceRule());
	        }
       		add(
       			$current, 
       			"arguments",
        		lv_arguments_4_0, 
        		"org.eclipse.xtext.xbase.Xtype.JvmArgumentTypeReference");
	        afterParserOrEnumRuleCall();
	    }

)
))*	otherlv_5='>' 
    {
    	newLeafNode(otherlv_5, grammarAccess.getJvmParameterizedTypeReferenceAccess().getGreaterThanSignKeyword_1_3());
    }
(((((
)	'.' 
))=>((
    {
        $current = forceCreateModelElementAndSet(
            grammarAccess.getJvmParameterizedTypeReferenceAccess().getJvmInnerTypeReferenceOuterAction_1_4_0_0_0(),
            $current);
    }
)	otherlv_7='.' 
    {
    	newLeafNode(otherlv_7, grammarAccess.getJvmParameterizedTypeReferenceAccess().getFullStopKeyword_1_4_0_0_1());
    }
))(
(
		{
			if ($current==null) {
	            $current = createModelElement(grammarAccess.getJvmParameterizedTypeReferenceRule());
	        }
        }
		{ 
	        newCompositeNode(grammarAccess.getJvmParameterizedTypeReferenceAccess().getTypeJvmTypeCrossReference_1_4_1_0()); 
	    }
		ruleValidID		{ 
	        afterParserOrEnumRuleCall();
	    }

)
)(((	'<' 
)=>	otherlv_9='<' 
    {
    	newLeafNode(otherlv_9, grammarAccess.getJvmParameterizedTypeReferenceAccess().getLessThanSignKeyword_1_4_2_0());
    }
)(
(
		{ 
	        newCompositeNode(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsJvmArgumentTypeReferenceParserRuleCall_1_4_2_1_0()); 
	    }
		lv_arguments_10_0=ruleJvmArgumentTypeReference		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getJvmParameterizedTypeReferenceRule());
	        }
       		add(
       			$current, 
       			"arguments",
        		lv_arguments_10_0, 
        		"org.eclipse.xtext.xbase.Xtype.JvmArgumentTypeReference");
	        afterParserOrEnumRuleCall();
	    }

)
)(	otherlv_11=',' 
    {
    	newLeafNode(otherlv_11, grammarAccess.getJvmParameterizedTypeReferenceAccess().getCommaKeyword_1_4_2_2_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsJvmArgumentTypeReferenceParserRuleCall_1_4_2_2_1_0()); 
	    }
		lv_arguments_12_0=ruleJvmArgumentTypeReference		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getJvmParameterizedTypeReferenceRule());
	        }
       		add(
       			$current, 
       			"arguments",
        		lv_arguments_12_0, 
        		"org.eclipse.xtext.xbase.Xtype.JvmArgumentTypeReference");
	        afterParserOrEnumRuleCall();
	    }

)
))*	otherlv_13='>' 
    {
    	newLeafNode(otherlv_13, grammarAccess.getJvmParameterizedTypeReferenceAccess().getGreaterThanSignKeyword_1_4_2_3());
    }
)?)*)?)
;





// Entry rule entryRuleJvmArgumentTypeReference
entryRuleJvmArgumentTypeReference returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getJvmArgumentTypeReferenceRule()); }
	 iv_ruleJvmArgumentTypeReference=ruleJvmArgumentTypeReference 
	 { $current=$iv_ruleJvmArgumentTypeReference.current; } 
	 EOF 
;

// Rule JvmArgumentTypeReference
ruleJvmArgumentTypeReference returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(
    { 
        newCompositeNode(grammarAccess.getJvmArgumentTypeReferenceAccess().getJvmTypeReferenceParserRuleCall_0()); 
    }
    this_JvmTypeReference_0=ruleJvmTypeReference
    { 
        $current = $this_JvmTypeReference_0.current; 
        afterParserOrEnumRuleCall();
    }

    |
    { 
        newCompositeNode(grammarAccess.getJvmArgumentTypeReferenceAccess().getJvmWildcardTypeReferenceParserRuleCall_1()); 
    }
    this_JvmWildcardTypeReference_1=ruleJvmWildcardTypeReference
    { 
        $current = $this_JvmWildcardTypeReference_1.current; 
        afterParserOrEnumRuleCall();
    }
)
;





// Entry rule entryRuleJvmWildcardTypeReference
entryRuleJvmWildcardTypeReference returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getJvmWildcardTypeReferenceRule()); }
	 iv_ruleJvmWildcardTypeReference=ruleJvmWildcardTypeReference 
	 { $current=$iv_ruleJvmWildcardTypeReference.current; } 
	 EOF 
;

// Rule JvmWildcardTypeReference
ruleJvmWildcardTypeReference returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
    {
        $current = forceCreateModelElement(
            grammarAccess.getJvmWildcardTypeReferenceAccess().getJvmWildcardTypeReferenceAction_0(),
            $current);
    }
)	otherlv_1='?' 
    {
    	newLeafNode(otherlv_1, grammarAccess.getJvmWildcardTypeReferenceAccess().getQuestionMarkKeyword_1());
    }
(((
(
		{ 
	        newCompositeNode(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsJvmUpperBoundParserRuleCall_2_0_0_0()); 
	    }
		lv_constraints_2_0=ruleJvmUpperBound		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getJvmWildcardTypeReferenceRule());
	        }
       		add(
       			$current, 
       			"constraints",
        		lv_constraints_2_0, 
        		"org.eclipse.xtext.xbase.Xtype.JvmUpperBound");
	        afterParserOrEnumRuleCall();
	    }

)
)(
(
		{ 
	        newCompositeNode(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsJvmUpperBoundAndedParserRuleCall_2_0_1_0()); 
	    }
		lv_constraints_3_0=ruleJvmUpperBoundAnded		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getJvmWildcardTypeReferenceRule());
	        }
       		add(
       			$current, 
       			"constraints",
        		lv_constraints_3_0, 
        		"org.eclipse.xtext.xbase.Xtype.JvmUpperBoundAnded");
	        afterParserOrEnumRuleCall();
	    }

)
)*)
    |((
(
		{ 
	        newCompositeNode(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsJvmLowerBoundParserRuleCall_2_1_0_0()); 
	    }
		lv_constraints_4_0=ruleJvmLowerBound		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getJvmWildcardTypeReferenceRule());
	        }
       		add(
       			$current, 
       			"constraints",
        		lv_constraints_4_0, 
        		"org.eclipse.xtext.xbase.Xtype.JvmLowerBound");
	        afterParserOrEnumRuleCall();
	    }

)
)(
(
		{ 
	        newCompositeNode(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsJvmLowerBoundAndedParserRuleCall_2_1_1_0()); 
	    }
		lv_constraints_5_0=ruleJvmLowerBoundAnded		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getJvmWildcardTypeReferenceRule());
	        }
       		add(
       			$current, 
       			"constraints",
        		lv_constraints_5_0, 
        		"org.eclipse.xtext.xbase.Xtype.JvmLowerBoundAnded");
	        afterParserOrEnumRuleCall();
	    }

)
)*))?)
;





// Entry rule entryRuleJvmUpperBound
entryRuleJvmUpperBound returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getJvmUpperBoundRule()); }
	 iv_ruleJvmUpperBound=ruleJvmUpperBound 
	 { $current=$iv_ruleJvmUpperBound.current; } 
	 EOF 
;

// Rule JvmUpperBound
ruleJvmUpperBound returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(	otherlv_0='extends' 
    {
    	newLeafNode(otherlv_0, grammarAccess.getJvmUpperBoundAccess().getExtendsKeyword_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getJvmUpperBoundAccess().getTypeReferenceJvmTypeReferenceParserRuleCall_1_0()); 
	    }
		lv_typeReference_1_0=ruleJvmTypeReference		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getJvmUpperBoundRule());
	        }
       		set(
       			$current, 
       			"typeReference",
        		lv_typeReference_1_0, 
        		"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
	        afterParserOrEnumRuleCall();
	    }

)
))
;





// Entry rule entryRuleJvmUpperBoundAnded
entryRuleJvmUpperBoundAnded returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getJvmUpperBoundAndedRule()); }
	 iv_ruleJvmUpperBoundAnded=ruleJvmUpperBoundAnded 
	 { $current=$iv_ruleJvmUpperBoundAnded.current; } 
	 EOF 
;

// Rule JvmUpperBoundAnded
ruleJvmUpperBoundAnded returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(	otherlv_0='&' 
    {
    	newLeafNode(otherlv_0, grammarAccess.getJvmUpperBoundAndedAccess().getAmpersandKeyword_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getJvmUpperBoundAndedAccess().getTypeReferenceJvmTypeReferenceParserRuleCall_1_0()); 
	    }
		lv_typeReference_1_0=ruleJvmTypeReference		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getJvmUpperBoundAndedRule());
	        }
       		set(
       			$current, 
       			"typeReference",
        		lv_typeReference_1_0, 
        		"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
	        afterParserOrEnumRuleCall();
	    }

)
))
;





// Entry rule entryRuleJvmLowerBound
entryRuleJvmLowerBound returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getJvmLowerBoundRule()); }
	 iv_ruleJvmLowerBound=ruleJvmLowerBound 
	 { $current=$iv_ruleJvmLowerBound.current; } 
	 EOF 
;

// Rule JvmLowerBound
ruleJvmLowerBound returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(	otherlv_0='super' 
    {
    	newLeafNode(otherlv_0, grammarAccess.getJvmLowerBoundAccess().getSuperKeyword_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getJvmLowerBoundAccess().getTypeReferenceJvmTypeReferenceParserRuleCall_1_0()); 
	    }
		lv_typeReference_1_0=ruleJvmTypeReference		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getJvmLowerBoundRule());
	        }
       		set(
       			$current, 
       			"typeReference",
        		lv_typeReference_1_0, 
        		"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
	        afterParserOrEnumRuleCall();
	    }

)
))
;





// Entry rule entryRuleJvmLowerBoundAnded
entryRuleJvmLowerBoundAnded returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getJvmLowerBoundAndedRule()); }
	 iv_ruleJvmLowerBoundAnded=ruleJvmLowerBoundAnded 
	 { $current=$iv_ruleJvmLowerBoundAnded.current; } 
	 EOF 
;

// Rule JvmLowerBoundAnded
ruleJvmLowerBoundAnded returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(	otherlv_0='&' 
    {
    	newLeafNode(otherlv_0, grammarAccess.getJvmLowerBoundAndedAccess().getAmpersandKeyword_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getJvmLowerBoundAndedAccess().getTypeReferenceJvmTypeReferenceParserRuleCall_1_0()); 
	    }
		lv_typeReference_1_0=ruleJvmTypeReference		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getJvmLowerBoundAndedRule());
	        }
       		set(
       			$current, 
       			"typeReference",
        		lv_typeReference_1_0, 
        		"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
	        afterParserOrEnumRuleCall();
	    }

)
))
;







// Entry rule entryRuleQualifiedNameWithWildcard
entryRuleQualifiedNameWithWildcard returns [String current=null] 
	:
	{ newCompositeNode(grammarAccess.getQualifiedNameWithWildcardRule()); } 
	 iv_ruleQualifiedNameWithWildcard=ruleQualifiedNameWithWildcard 
	 { $current=$iv_ruleQualifiedNameWithWildcard.current.getText(); }  
	 EOF 
;

// Rule QualifiedNameWithWildcard
ruleQualifiedNameWithWildcard returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(
    { 
        newCompositeNode(grammarAccess.getQualifiedNameWithWildcardAccess().getQualifiedNameParserRuleCall_0()); 
    }
    this_QualifiedName_0=ruleQualifiedName    {
		$current.merge(this_QualifiedName_0);
    }

    { 
        afterParserOrEnumRuleCall();
    }

	kw='.' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getQualifiedNameWithWildcardAccess().getFullStopKeyword_1()); 
    }

	kw='*' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getQualifiedNameWithWildcardAccess().getAsteriskKeyword_2()); 
    }
)
    ;







// Entry rule entryRuleXImportDeclaration
entryRuleXImportDeclaration returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getXImportDeclarationRule()); }
	 iv_ruleXImportDeclaration=ruleXImportDeclaration 
	 { $current=$iv_ruleXImportDeclaration.current; } 
	 EOF 
;

// Rule XImportDeclaration
ruleXImportDeclaration returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(	otherlv_0='import' 
    {
    	newLeafNode(otherlv_0, grammarAccess.getXImportDeclarationAccess().getImportKeyword_0());
    }
(((
(
		lv_static_1_0=	'static' 
    {
        newLeafNode(lv_static_1_0, grammarAccess.getXImportDeclarationAccess().getStaticStaticKeyword_1_0_0_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXImportDeclarationRule());
	        }
       		setWithLastConsumed($current, "static", true, "static");
	    }

)
)(
(
		lv_extension_2_0=	'extension' 
    {
        newLeafNode(lv_extension_2_0, grammarAccess.getXImportDeclarationAccess().getExtensionExtensionKeyword_1_0_1_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXImportDeclarationRule());
	        }
       		setWithLastConsumed($current, "extension", true, "extension");
	    }

)
)?(
(
		{
			if ($current==null) {
	            $current = createModelElement(grammarAccess.getXImportDeclarationRule());
	        }
        }
		{ 
	        newCompositeNode(grammarAccess.getXImportDeclarationAccess().getImportedTypeJvmDeclaredTypeCrossReference_1_0_2_0()); 
	    }
		ruleQualifiedNameInStaticImport		{ 
	        afterParserOrEnumRuleCall();
	    }

)
)((
(
		lv_wildcard_4_0=	'*' 
    {
        newLeafNode(lv_wildcard_4_0, grammarAccess.getXImportDeclarationAccess().getWildcardAsteriskKeyword_1_0_3_0_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getXImportDeclarationRule());
	        }
       		setWithLastConsumed($current, "wildcard", true, "*");
	    }

)
)
    |(
(
		{ 
	        newCompositeNode(grammarAccess.getXImportDeclarationAccess().getMemberNameValidIDParserRuleCall_1_0_3_1_0()); 
	    }
		lv_memberName_5_0=ruleValidID		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXImportDeclarationRule());
	        }
       		set(
       			$current, 
       			"memberName",
        		lv_memberName_5_0, 
        		"org.eclipse.emf.ecore.xcore.Xcore.ValidID");
	        afterParserOrEnumRuleCall();
	    }

)
)))
    |(
(
		{
			if ($current==null) {
	            $current = createModelElement(grammarAccess.getXImportDeclarationRule());
	        }
        }
		{ 
	        newCompositeNode(grammarAccess.getXImportDeclarationAccess().getImportedTypeJvmDeclaredTypeCrossReference_1_1_0()); 
	    }
		ruleQualifiedName		{ 
	        afterParserOrEnumRuleCall();
	    }

)
)
    |(
(
		{ 
	        newCompositeNode(grammarAccess.getXImportDeclarationAccess().getImportedNamespaceQualifiedNameWithWildcardParserRuleCall_1_2_0()); 
	    }
		lv_importedNamespace_7_0=ruleQualifiedNameWithWildcard		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getXImportDeclarationRule());
	        }
       		set(
       			$current, 
       			"importedNamespace",
        		lv_importedNamespace_7_0, 
        		"org.eclipse.xtext.xbase.Xtype.QualifiedNameWithWildcard");
	        afterParserOrEnumRuleCall();
	    }

)
))(	otherlv_8=';' 
    {
    	newLeafNode(otherlv_8, grammarAccess.getXImportDeclarationAccess().getSemicolonKeyword_2());
    }
)?)
;





// Entry rule entryRuleQualifiedNameInStaticImport
entryRuleQualifiedNameInStaticImport returns [String current=null] 
	:
	{ newCompositeNode(grammarAccess.getQualifiedNameInStaticImportRule()); } 
	 iv_ruleQualifiedNameInStaticImport=ruleQualifiedNameInStaticImport 
	 { $current=$iv_ruleQualifiedNameInStaticImport.current.getText(); }  
	 EOF 
;

// Rule QualifiedNameInStaticImport
ruleQualifiedNameInStaticImport returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(
    { 
        newCompositeNode(grammarAccess.getQualifiedNameInStaticImportAccess().getValidIDParserRuleCall_0()); 
    }
    this_ValidID_0=ruleValidID    {
		$current.merge(this_ValidID_0);
    }

    { 
        afterParserOrEnumRuleCall();
    }

	kw='.' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getQualifiedNameInStaticImportAccess().getFullStopKeyword_1()); 
    }
)+
    ;





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 : .;


