docs: public final EObject ruleReferencedMetamodel() throws RecognitionException {
          EObject current = null;
  
          Token otherlv_0=null;
          Token otherlv_1=null;
          Token otherlv_2=null;
          AntlrDatatypeRuleToken lv_alias_3_0 = null;
  
  
  
          	enterRule();
  
          try {
              // InternalXtext.g:472:2: ( (otherlv_0= 'import' ( (otherlv_1= RULE_STRING ) ) (otherlv_2= 'as' ( (lv_alias_3_0= ruleValidID ) ) )? ) )
              // InternalXtext.g:473:2: (otherlv_0= 'import' ( (otherlv_1= RULE_STRING ) ) (otherlv_2= 'as' ( (lv_alias_3_0= ruleValidID ) ) )? )
              {
              // InternalXtext.g:473:2: (otherlv_0= 'import' ( (otherlv_1= RULE_STRING ) ) (otherlv_2= 'as' ( (lv_alias_3_0= ruleValidID ) ) )? )
              // InternalXtext.g:474:3: otherlv_0= 'import' ( (otherlv_1= RULE_STRING ) ) (otherlv_2= 'as' ( (lv_alias_3_0= ruleValidID ) ) )?
              {
              otherlv_0=(Token)match(input,20,FollowSets000.FOLLOW_11); 
  
              			newLeafNode(otherlv_0, grammarAccess.getReferencedMetamodelAccess().getImportKeyword_0());
              		
              // InternalXtext.g:478:3: ( (otherlv_1= RULE_STRING ) )
              // InternalXtext.g:479:4: (otherlv_1= RULE_STRING )
              {
              // InternalXtext.g:479:4: (otherlv_1= RULE_STRING )
              // InternalXtext.g:480:5: otherlv_1= RULE_STRING
              {
  
              					if (current==null) {
              						current = createModelElement(grammarAccess.getReferencedMetamodelRule());
              					}
              				
              otherlv_1=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_12); 
  
              					newLeafNode(otherlv_1, grammarAccess.getReferencedMetamodelAccess().getEPackageEPackageCrossReference_1_0());
              				
  
              }
  
  
              }
  
              // InternalXtext.g:491:3: (otherlv_2= 'as' ( (lv_alias_3_0= ruleValidID ) ) )?
              int alt12=2;
              int LA12_0 = input.LA(1);
  
              if ( (LA12_0==19) ) {
                  alt12=1;
              }
              switch (alt12) {
                  case 1 :
                      // InternalXtext.g:492:4: otherlv_2= 'as' ( (lv_alias_3_0= ruleValidID ) )
                      {
                      otherlv_2=(Token)match(input,19,FollowSets000.FOLLOW_3); 
  
                      				newLeafNode(otherlv_2, grammarAccess.getReferencedMetamodelAccess().getAsKeyword_2_0());
                      			
                      // InternalXtext.g:496:4: ( (lv_alias_3_0= ruleValidID ) )
                      // InternalXtext.g:497:5: (lv_alias_3_0= ruleValidID )
                      {
                      // InternalXtext.g:497:5: (lv_alias_3_0= ruleValidID )
                      // InternalXtext.g:498:6: lv_alias_3_0= ruleValidID
                      {
  
                      						newCompositeNode(grammarAccess.getReferencedMetamodelAccess().getAliasValidIDParserRuleCall_2_1_0());
                      					
                      pushFollow(FollowSets000.FOLLOW_2);
                      lv_alias_3_0=ruleValidID();
  
                      state._fsp--;
  
  
                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getReferencedMetamodelRule());
                      						}
                      						set(
                      							current,
                      							"alias",
                      							lv_alias_3_0,
                      							"org.eclipse.xtext.Xtext.ValidID");
                      						afterParserOrEnumRuleCall();
                      					
  
                      }
  
  
                      }
  
  
                      }
                      break;
  
              }
  
  
              }
  
  
              }
  
  
              	leaveRule();
  
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }