InternalReqSpecParser.java

package org.osate.reqspec.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.emf.common.util.Enumerator;
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.osate.reqspec.services.ReqSpecGrammarAccess;



import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
/**
 * Copyright (c) 2004-2025 Carnegie Mellon University and others. (see Contributors file). 
 * All Rights Reserved.
 * 
 * NO WARRANTY. ALL MATERIAL IS FURNISHED ON AN "AS-IS" BASIS. CARNEGIE MELLON UNIVERSITY MAKES NO WARRANTIES OF ANY
 * KIND, EITHER EXPRESSED OR IMPLIED, AS TO ANY MATTER INCLUDING, BUT NOT LIMITED TO, WARRANTY OF FITNESS FOR PURPOSE
 * OR MERCHANTABILITY, EXCLUSIVITY, OR RESULTS OBTAINED FROM USE OF THE MATERIAL. CARNEGIE MELLON UNIVERSITY DOES NOT
 * MAKE ANY WARRANTY OF ANY KIND WITH RESPECT TO FREEDOM FROM PATENT, TRADEMARK, OR COPYRIGHT INFRINGEMENT.
 * 
 * This program and the accompanying materials are made available under the terms of the Eclipse Public License 2.0
 * which is available at https://www.eclipse.org/legal/epl-2.0/
 * SPDX-License-Identifier: EPL-2.0
 * 
 * Created, in part, with funding and support from the United States Government. (see Acknowledgments file).
 * 
 * This program includes and/or can make use of certain third party source code, object code, documentation and other
 * files ("Third Party Software"). The Third Party Software that is used by this program is dependent upon your system
 * configuration. By using this program, You agree to comply with any and all relevant Third Party Software terms and
 * conditions contained in any such Third Party Software or separate license file distributed with such Third Party
 * Software. The parties who own the Third Party Software ("Third Party Licensors") are intended third party benefici-
 * aries to this license with respect to the terms applicable to their Third Party Software. Third Party Software li-
 * censes only apply to the Third Party Software and not any other portion of this program or this program as a whole.
 */
@SuppressWarnings("all")
public class InternalReqSpecParser extends AbstractInternalAntlrParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_STRING", "RULE_ID", "RULE_INT", "RULE_REAL_LIT", "RULE_DIGIT", "RULE_EXPONENT", "RULE_INT_EXPONENT", "RULE_EXTENDED_DIGIT", "RULE_BASED_INTEGER", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'constants'", "'['", "']'", "'stakeholder'", "'goals'", "':'", "'for'", "'use'", "'see'", "'document'", "'issues'", "'section'", "'system'", "'requirements'", "'global'", "'goal'", "'category'", "'refines'", "'conflicts'", "'with'", "'evolves'", "'dropped'", "'requirement'", "'mitigates'", "'inherits'", "'decomposes'", "'development'", "'include'", "'self'", "'when'", "'in'", "'mode'", "','", "'error'", "'state'", "'('", "')'", "'informal'", "'predicate'", "'value'", "'upto'", "'downto'", "'#'", "'val'", "'typeof'", "'='", "'as'", "'/'", "'.'", "'description'", "'this'", "'rationale'", "'uncertainty'", "'volatility'", "'precedence'", "'impact'", "'boolean'", "'integer'", "'units'", "'real'", "'string'", "'model'", "'element'", "'compute'", "'%'", "'img'", "'or'", "'||'", "'and'", "'&&'", "'=='", "'!='", "'>='", "'<='", "'>'", "'<'", "'><'", "'+'", "'-'", "'*'", "'div'", "'mod'", "'not'", "'..'", "'delta'", "'if'", "'then'", "'else'", "'endif'", "'true'", "'false'", "'abstract'", "'bus'", "'data'", "'device'", "'memory'", "'process'", "'processor'", "'subprogram'", "'group'", "'thread'", "'virtual'", "'::'", "'component'", "'feature'", "'connection'", "'flow'", "'root'"
    };
    public static final int T__50=50;
    public static final int T__59=59;
    public static final int T__55=55;
    public static final int T__56=56;
    public static final int T__57=57;
    public static final int T__58=58;
    public static final int T__51=51;
    public static final int T__52=52;
    public static final int T__53=53;
    public static final int T__54=54;
    public static final int T__60=60;
    public static final int T__61=61;
    public static final int RULE_ID=5;
    public static final int RULE_DIGIT=8;
    public static final int RULE_INT=6;
    public static final int T__66=66;
    public static final int RULE_ML_COMMENT=13;
    public static final int T__67=67;
    public static final int T__68=68;
    public static final int T__69=69;
    public static final int T__62=62;
    public static final int T__63=63;
    public static final int T__64=64;
    public static final int T__65=65;
    public static final int RULE_REAL_LIT=7;
    public static final int T__37=37;
    public static final int T__38=38;
    public static final int T__39=39;
    public static final int T__33=33;
    public static final int T__34=34;
    public static final int T__35=35;
    public static final int T__36=36;
    public static final int T__30=30;
    public static final int T__31=31;
    public static final int T__32=32;
    public static final int RULE_EXPONENT=9;
    public static final int T__48=48;
    public static final int T__49=49;
    public static final int T__44=44;
    public static final int RULE_EXTENDED_DIGIT=11;
    public static final int T__45=45;
    public static final int T__46=46;
    public static final int T__47=47;
    public static final int T__40=40;
    public static final int T__41=41;
    public static final int T__42=42;
    public static final int T__43=43;
    public static final int T__91=91;
    public static final int T__100=100;
    public static final int T__92=92;
    public static final int T__93=93;
    public static final int T__102=102;
    public static final int T__94=94;
    public static final int T__101=101;
    public static final int T__90=90;
    public static final int RULE_INT_EXPONENT=10;
    public static final int T__19=19;
    public static final int T__17=17;
    public static final int T__18=18;
    public static final int T__99=99;
    public static final int T__95=95;
    public static final int T__96=96;
    public static final int RULE_BASED_INTEGER=12;
    public static final int T__97=97;
    public static final int T__98=98;
    public static final int T__26=26;
    public static final int T__27=27;
    public static final int T__28=28;
    public static final int T__29=29;
    public static final int T__22=22;
    public static final int T__23=23;
    public static final int T__24=24;
    public static final int T__25=25;
    public static final int T__20=20;
    public static final int T__21=21;
    public static final int T__122=122;
    public static final int T__70=70;
    public static final int T__121=121;
    public static final int T__71=71;
    public static final int T__124=124;
    public static final int T__72=72;
    public static final int T__123=123;
    public static final int T__120=120;
    public static final int RULE_STRING=4;
    public static final int RULE_SL_COMMENT=14;
    public static final int T__77=77;
    public static final int T__119=119;
    public static final int T__78=78;
    public static final int T__118=118;
    public static final int T__79=79;
    public static final int T__73=73;
    public static final int T__115=115;
    public static final int EOF=-1;
    public static final int T__74=74;
    public static final int T__114=114;
    public static final int T__75=75;
    public static final int T__117=117;
    public static final int T__76=76;
    public static final int T__116=116;
    public static final int T__80=80;
    public static final int T__111=111;
    public static final int T__81=81;
    public static final int T__110=110;
    public static final int T__82=82;
    public static final int T__113=113;
    public static final int T__83=83;
    public static final int T__112=112;
    public static final int RULE_WS=15;
    public static final int RULE_ANY_OTHER=16;
    public static final int T__88=88;
    public static final int T__108=108;
    public static final int T__89=89;
    public static final int T__107=107;
    public static final int T__109=109;
    public static final int T__84=84;
    public static final int T__104=104;
    public static final int T__85=85;
    public static final int T__103=103;
    public static final int T__86=86;
    public static final int T__106=106;
    public static final int T__87=87;
    public static final int T__105=105;

    // delegates
    // delegators


        public InternalReqSpecParser(TokenStream input) {
            this(input, new RecognizerSharedState());
        }
        public InternalReqSpecParser(TokenStream input, RecognizerSharedState state) {
            super(input, state);
             
        }
        

    public String[] getTokenNames() { return InternalReqSpecParser.tokenNames; }
    public String getGrammarFileName() { return "InternalReqSpec.g"; }



     	private ReqSpecGrammarAccess grammarAccess;

        public InternalReqSpecParser(TokenStream input, ReqSpecGrammarAccess grammarAccess) {
            this(input);
            this.grammarAccess = grammarAccess;
            registerRules(grammarAccess.getGrammar());
        }

        @Override
        protected String getFirstRuleName() {
        	return "ReqSpec";
       	}

       	@Override
       	protected ReqSpecGrammarAccess getGrammarAccess() {
       		return grammarAccess;
       	}




    // $ANTLR start "entryRuleReqSpec"
    // InternalReqSpec.g:85:1: entryRuleReqSpec returns [EObject current=null] : iv_ruleReqSpec= ruleReqSpec EOF ;
    public final EObject entryRuleReqSpec() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleReqSpec = null;


        try {
            // InternalReqSpec.g:85:48: (iv_ruleReqSpec= ruleReqSpec EOF )
            // InternalReqSpec.g:86:2: iv_ruleReqSpec= ruleReqSpec EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getReqSpecRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleReqSpec=ruleReqSpec();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleReqSpec; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleReqSpec"


    // $ANTLR start "ruleReqSpec"
    // InternalReqSpec.g:92:1: ruleReqSpec returns [EObject current=null] : ( ( (lv_parts_0_1= ruleSystemRequirementSet | lv_parts_0_2= ruleGlobalRequirementSet | lv_parts_0_3= ruleStakeholderGoals | lv_parts_0_4= ruleReqDocument | lv_parts_0_5= ruleGlobalConstants ) ) )+ ;
    public final EObject ruleReqSpec() throws RecognitionException {
        EObject current = null;

        EObject lv_parts_0_1 = null;

        EObject lv_parts_0_2 = null;

        EObject lv_parts_0_3 = null;

        EObject lv_parts_0_4 = null;

        EObject lv_parts_0_5 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:98:2: ( ( ( (lv_parts_0_1= ruleSystemRequirementSet | lv_parts_0_2= ruleGlobalRequirementSet | lv_parts_0_3= ruleStakeholderGoals | lv_parts_0_4= ruleReqDocument | lv_parts_0_5= ruleGlobalConstants ) ) )+ )
            // InternalReqSpec.g:99:2: ( ( (lv_parts_0_1= ruleSystemRequirementSet | lv_parts_0_2= ruleGlobalRequirementSet | lv_parts_0_3= ruleStakeholderGoals | lv_parts_0_4= ruleReqDocument | lv_parts_0_5= ruleGlobalConstants ) ) )+
            {
            // InternalReqSpec.g:99:2: ( ( (lv_parts_0_1= ruleSystemRequirementSet | lv_parts_0_2= ruleGlobalRequirementSet | lv_parts_0_3= ruleStakeholderGoals | lv_parts_0_4= ruleReqDocument | lv_parts_0_5= ruleGlobalConstants ) ) )+
            int cnt2=0;
            loop2:
            do {
                int alt2=2;
                int LA2_0 = input.LA(1);

                if ( (LA2_0==17||LA2_0==20||LA2_0==26||LA2_0==29||LA2_0==31) ) {
                    alt2=1;
                }


                switch (alt2) {
            	case 1 :
            	    // InternalReqSpec.g:100:3: ( (lv_parts_0_1= ruleSystemRequirementSet | lv_parts_0_2= ruleGlobalRequirementSet | lv_parts_0_3= ruleStakeholderGoals | lv_parts_0_4= ruleReqDocument | lv_parts_0_5= ruleGlobalConstants ) )
            	    {
            	    // InternalReqSpec.g:100:3: ( (lv_parts_0_1= ruleSystemRequirementSet | lv_parts_0_2= ruleGlobalRequirementSet | lv_parts_0_3= ruleStakeholderGoals | lv_parts_0_4= ruleReqDocument | lv_parts_0_5= ruleGlobalConstants ) )
            	    // InternalReqSpec.g:101:4: (lv_parts_0_1= ruleSystemRequirementSet | lv_parts_0_2= ruleGlobalRequirementSet | lv_parts_0_3= ruleStakeholderGoals | lv_parts_0_4= ruleReqDocument | lv_parts_0_5= ruleGlobalConstants )
            	    {
            	    // InternalReqSpec.g:101:4: (lv_parts_0_1= ruleSystemRequirementSet | lv_parts_0_2= ruleGlobalRequirementSet | lv_parts_0_3= ruleStakeholderGoals | lv_parts_0_4= ruleReqDocument | lv_parts_0_5= ruleGlobalConstants )
            	    int alt1=5;
            	    switch ( input.LA(1) ) {
            	    case 29:
            	        {
            	        alt1=1;
            	        }
            	        break;
            	    case 31:
            	        {
            	        alt1=2;
            	        }
            	        break;
            	    case 20:
            	        {
            	        alt1=3;
            	        }
            	        break;
            	    case 26:
            	        {
            	        alt1=4;
            	        }
            	        break;
            	    case 17:
            	        {
            	        alt1=5;
            	        }
            	        break;
            	    default:
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 1, 0, input);

            	        throw nvae;
            	    }

            	    switch (alt1) {
            	        case 1 :
            	            // InternalReqSpec.g:102:5: lv_parts_0_1= ruleSystemRequirementSet
            	            {
            	            if ( state.backtracking==0 ) {

            	              					newCompositeNode(grammarAccess.getReqSpecAccess().getPartsSystemRequirementSetParserRuleCall_0_0());
            	              				
            	            }
            	            pushFollow(FollowSets000.FOLLOW_3);
            	            lv_parts_0_1=ruleSystemRequirementSet();

            	            state._fsp--;
            	            if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              					if (current==null) {
            	              						current = createModelElementForParent(grammarAccess.getReqSpecRule());
            	              					}
            	              					add(
            	              						current,
            	              						"parts",
            	              						lv_parts_0_1,
            	              						"org.osate.reqspec.ReqSpec.SystemRequirementSet");
            	              					afterParserOrEnumRuleCall();
            	              				
            	            }

            	            }
            	            break;
            	        case 2 :
            	            // InternalReqSpec.g:118:5: lv_parts_0_2= ruleGlobalRequirementSet
            	            {
            	            if ( state.backtracking==0 ) {

            	              					newCompositeNode(grammarAccess.getReqSpecAccess().getPartsGlobalRequirementSetParserRuleCall_0_1());
            	              				
            	            }
            	            pushFollow(FollowSets000.FOLLOW_3);
            	            lv_parts_0_2=ruleGlobalRequirementSet();

            	            state._fsp--;
            	            if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              					if (current==null) {
            	              						current = createModelElementForParent(grammarAccess.getReqSpecRule());
            	              					}
            	              					add(
            	              						current,
            	              						"parts",
            	              						lv_parts_0_2,
            	              						"org.osate.reqspec.ReqSpec.GlobalRequirementSet");
            	              					afterParserOrEnumRuleCall();
            	              				
            	            }

            	            }
            	            break;
            	        case 3 :
            	            // InternalReqSpec.g:134:5: lv_parts_0_3= ruleStakeholderGoals
            	            {
            	            if ( state.backtracking==0 ) {

            	              					newCompositeNode(grammarAccess.getReqSpecAccess().getPartsStakeholderGoalsParserRuleCall_0_2());
            	              				
            	            }
            	            pushFollow(FollowSets000.FOLLOW_3);
            	            lv_parts_0_3=ruleStakeholderGoals();

            	            state._fsp--;
            	            if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              					if (current==null) {
            	              						current = createModelElementForParent(grammarAccess.getReqSpecRule());
            	              					}
            	              					add(
            	              						current,
            	              						"parts",
            	              						lv_parts_0_3,
            	              						"org.osate.reqspec.ReqSpec.StakeholderGoals");
            	              					afterParserOrEnumRuleCall();
            	              				
            	            }

            	            }
            	            break;
            	        case 4 :
            	            // InternalReqSpec.g:150:5: lv_parts_0_4= ruleReqDocument
            	            {
            	            if ( state.backtracking==0 ) {

            	              					newCompositeNode(grammarAccess.getReqSpecAccess().getPartsReqDocumentParserRuleCall_0_3());
            	              				
            	            }
            	            pushFollow(FollowSets000.FOLLOW_3);
            	            lv_parts_0_4=ruleReqDocument();

            	            state._fsp--;
            	            if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              					if (current==null) {
            	              						current = createModelElementForParent(grammarAccess.getReqSpecRule());
            	              					}
            	              					add(
            	              						current,
            	              						"parts",
            	              						lv_parts_0_4,
            	              						"org.osate.reqspec.ReqSpec.ReqDocument");
            	              					afterParserOrEnumRuleCall();
            	              				
            	            }

            	            }
            	            break;
            	        case 5 :
            	            // InternalReqSpec.g:166:5: lv_parts_0_5= ruleGlobalConstants
            	            {
            	            if ( state.backtracking==0 ) {

            	              					newCompositeNode(grammarAccess.getReqSpecAccess().getPartsGlobalConstantsParserRuleCall_0_4());
            	              				
            	            }
            	            pushFollow(FollowSets000.FOLLOW_3);
            	            lv_parts_0_5=ruleGlobalConstants();

            	            state._fsp--;
            	            if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              					if (current==null) {
            	              						current = createModelElementForParent(grammarAccess.getReqSpecRule());
            	              					}
            	              					add(
            	              						current,
            	              						"parts",
            	              						lv_parts_0_5,
            	              						"org.osate.reqspec.ReqSpec.GlobalConstants");
            	              					afterParserOrEnumRuleCall();
            	              				
            	            }

            	            }
            	            break;

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    if ( cnt2 >= 1 ) break loop2;
            	    if (state.backtracking>0) {state.failed=true; return current;}
                        EarlyExitException eee =
                            new EarlyExitException(2, input);
                        throw eee;
                }
                cnt2++;
            } while (true);


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleReqSpec"


    // $ANTLR start "entryRuleGlobalConstants"
    // InternalReqSpec.g:187:1: entryRuleGlobalConstants returns [EObject current=null] : iv_ruleGlobalConstants= ruleGlobalConstants EOF ;
    public final EObject entryRuleGlobalConstants() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleGlobalConstants = null;


        try {
            // InternalReqSpec.g:187:56: (iv_ruleGlobalConstants= ruleGlobalConstants EOF )
            // InternalReqSpec.g:188:2: iv_ruleGlobalConstants= ruleGlobalConstants EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getGlobalConstantsRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleGlobalConstants=ruleGlobalConstants();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleGlobalConstants; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleGlobalConstants"


    // $ANTLR start "ruleGlobalConstants"
    // InternalReqSpec.g:194:1: ruleGlobalConstants returns [EObject current=null] : (otherlv_0= 'constants' ( (lv_name_1_0= ruleQualifiedName ) ) otherlv_2= '[' ( (lv_constants_3_0= ruleValDeclaration ) )* otherlv_4= ']' ) ;
    public final EObject ruleGlobalConstants() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        AntlrDatatypeRuleToken lv_name_1_0 = null;

        EObject lv_constants_3_0 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:200:2: ( (otherlv_0= 'constants' ( (lv_name_1_0= ruleQualifiedName ) ) otherlv_2= '[' ( (lv_constants_3_0= ruleValDeclaration ) )* otherlv_4= ']' ) )
            // InternalReqSpec.g:201:2: (otherlv_0= 'constants' ( (lv_name_1_0= ruleQualifiedName ) ) otherlv_2= '[' ( (lv_constants_3_0= ruleValDeclaration ) )* otherlv_4= ']' )
            {
            // InternalReqSpec.g:201:2: (otherlv_0= 'constants' ( (lv_name_1_0= ruleQualifiedName ) ) otherlv_2= '[' ( (lv_constants_3_0= ruleValDeclaration ) )* otherlv_4= ']' )
            // InternalReqSpec.g:202:3: otherlv_0= 'constants' ( (lv_name_1_0= ruleQualifiedName ) ) otherlv_2= '[' ( (lv_constants_3_0= ruleValDeclaration ) )* otherlv_4= ']'
            {
            otherlv_0=(Token)match(input,17,FollowSets000.FOLLOW_4); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getGlobalConstantsAccess().getConstantsKeyword_0());
              		
            }
            // InternalReqSpec.g:206:3: ( (lv_name_1_0= ruleQualifiedName ) )
            // InternalReqSpec.g:207:4: (lv_name_1_0= ruleQualifiedName )
            {
            // InternalReqSpec.g:207:4: (lv_name_1_0= ruleQualifiedName )
            // InternalReqSpec.g:208:5: lv_name_1_0= ruleQualifiedName
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getGlobalConstantsAccess().getNameQualifiedNameParserRuleCall_1_0());
              				
            }
            pushFollow(FollowSets000.FOLLOW_5);
            lv_name_1_0=ruleQualifiedName();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getGlobalConstantsRule());
              					}
              					set(
              						current,
              						"name",
              						lv_name_1_0,
              						"org.osate.alisa.common.Common.QualifiedName");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            otherlv_2=(Token)match(input,18,FollowSets000.FOLLOW_6); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_2, grammarAccess.getGlobalConstantsAccess().getLeftSquareBracketKeyword_2());
              		
            }
            // InternalReqSpec.g:229:3: ( (lv_constants_3_0= ruleValDeclaration ) )*
            loop3:
            do {
                int alt3=2;
                int LA3_0 = input.LA(1);

                if ( (LA3_0==60) ) {
                    alt3=1;
                }


                switch (alt3) {
            	case 1 :
            	    // InternalReqSpec.g:230:4: (lv_constants_3_0= ruleValDeclaration )
            	    {
            	    // InternalReqSpec.g:230:4: (lv_constants_3_0= ruleValDeclaration )
            	    // InternalReqSpec.g:231:5: lv_constants_3_0= ruleValDeclaration
            	    {
            	    if ( state.backtracking==0 ) {

            	      					newCompositeNode(grammarAccess.getGlobalConstantsAccess().getConstantsValDeclarationParserRuleCall_3_0());
            	      				
            	    }
            	    pushFollow(FollowSets000.FOLLOW_6);
            	    lv_constants_3_0=ruleValDeclaration();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					if (current==null) {
            	      						current = createModelElementForParent(grammarAccess.getGlobalConstantsRule());
            	      					}
            	      					add(
            	      						current,
            	      						"constants",
            	      						lv_constants_3_0,
            	      						"org.osate.reqspec.ReqSpec.ValDeclaration");
            	      					afterParserOrEnumRuleCall();
            	      				
            	    }

            	    }


            	    }
            	    break;

            	default :
            	    break loop3;
                }
            } while (true);

            otherlv_4=(Token)match(input,19,FollowSets000.FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_4, grammarAccess.getGlobalConstantsAccess().getRightSquareBracketKeyword_4());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleGlobalConstants"


    // $ANTLR start "entryRuleStakeholderGoals"
    // InternalReqSpec.g:256:1: entryRuleStakeholderGoals returns [EObject current=null] : iv_ruleStakeholderGoals= ruleStakeholderGoals EOF ;
    public final EObject entryRuleStakeholderGoals() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleStakeholderGoals = null;


        try {
            // InternalReqSpec.g:256:57: (iv_ruleStakeholderGoals= ruleStakeholderGoals EOF )
            // InternalReqSpec.g:257:2: iv_ruleStakeholderGoals= ruleStakeholderGoals EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getStakeholderGoalsRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleStakeholderGoals=ruleStakeholderGoals();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleStakeholderGoals; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleStakeholderGoals"


    // $ANTLR start "ruleStakeholderGoals"
    // InternalReqSpec.g:263:1: ruleStakeholderGoals returns [EObject current=null] : (otherlv_0= 'stakeholder' otherlv_1= 'goals' ( (lv_name_2_0= ruleQualifiedName ) ) (otherlv_3= ':' ( (lv_title_4_0= RULE_STRING ) ) )? (otherlv_5= 'for' ( ( ( ruleAadlClassifierReference ) ) | ( (lv_componentCategory_7_0= ruleComponentCategory ) )+ ) ) (otherlv_8= 'use' otherlv_9= 'constants' ( ( ruleQualifiedName ) )+ )? otherlv_11= '[' ( ( ( ( ({...}? => ( ({...}? => ( (lv_description_13_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_goals_15_0= ruleGoal ) ) )+ ) ) | ({...}? => ( ({...}? => (otherlv_16= 'see' otherlv_17= 'document' ( (lv_docReference_18_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'issues' ( (lv_issues_20_0= RULE_STRING ) )+ ) ) ) ) )* ) ) ) otherlv_21= ']' ) ;
    public final EObject ruleStakeholderGoals() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        Token lv_title_4_0=null;
        Token otherlv_5=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        Token otherlv_11=null;
        Token otherlv_16=null;
        Token otherlv_17=null;
        Token otherlv_19=null;
        Token lv_issues_20_0=null;
        Token otherlv_21=null;
        AntlrDatatypeRuleToken lv_name_2_0 = null;

        AntlrDatatypeRuleToken lv_componentCategory_7_0 = null;

        EObject lv_description_13_0 = null;

        EObject lv_constants_14_0 = null;

        EObject lv_goals_15_0 = null;

        EObject lv_docReference_18_0 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:269:2: ( (otherlv_0= 'stakeholder' otherlv_1= 'goals' ( (lv_name_2_0= ruleQualifiedName ) ) (otherlv_3= ':' ( (lv_title_4_0= RULE_STRING ) ) )? (otherlv_5= 'for' ( ( ( ruleAadlClassifierReference ) ) | ( (lv_componentCategory_7_0= ruleComponentCategory ) )+ ) ) (otherlv_8= 'use' otherlv_9= 'constants' ( ( ruleQualifiedName ) )+ )? otherlv_11= '[' ( ( ( ( ({...}? => ( ({...}? => ( (lv_description_13_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_goals_15_0= ruleGoal ) ) )+ ) ) | ({...}? => ( ({...}? => (otherlv_16= 'see' otherlv_17= 'document' ( (lv_docReference_18_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'issues' ( (lv_issues_20_0= RULE_STRING ) )+ ) ) ) ) )* ) ) ) otherlv_21= ']' ) )
            // InternalReqSpec.g:270:2: (otherlv_0= 'stakeholder' otherlv_1= 'goals' ( (lv_name_2_0= ruleQualifiedName ) ) (otherlv_3= ':' ( (lv_title_4_0= RULE_STRING ) ) )? (otherlv_5= 'for' ( ( ( ruleAadlClassifierReference ) ) | ( (lv_componentCategory_7_0= ruleComponentCategory ) )+ ) ) (otherlv_8= 'use' otherlv_9= 'constants' ( ( ruleQualifiedName ) )+ )? otherlv_11= '[' ( ( ( ( ({...}? => ( ({...}? => ( (lv_description_13_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_goals_15_0= ruleGoal ) ) )+ ) ) | ({...}? => ( ({...}? => (otherlv_16= 'see' otherlv_17= 'document' ( (lv_docReference_18_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'issues' ( (lv_issues_20_0= RULE_STRING ) )+ ) ) ) ) )* ) ) ) otherlv_21= ']' )
            {
            // InternalReqSpec.g:270:2: (otherlv_0= 'stakeholder' otherlv_1= 'goals' ( (lv_name_2_0= ruleQualifiedName ) ) (otherlv_3= ':' ( (lv_title_4_0= RULE_STRING ) ) )? (otherlv_5= 'for' ( ( ( ruleAadlClassifierReference ) ) | ( (lv_componentCategory_7_0= ruleComponentCategory ) )+ ) ) (otherlv_8= 'use' otherlv_9= 'constants' ( ( ruleQualifiedName ) )+ )? otherlv_11= '[' ( ( ( ( ({...}? => ( ({...}? => ( (lv_description_13_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_goals_15_0= ruleGoal ) ) )+ ) ) | ({...}? => ( ({...}? => (otherlv_16= 'see' otherlv_17= 'document' ( (lv_docReference_18_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'issues' ( (lv_issues_20_0= RULE_STRING ) )+ ) ) ) ) )* ) ) ) otherlv_21= ']' )
            // InternalReqSpec.g:271:3: otherlv_0= 'stakeholder' otherlv_1= 'goals' ( (lv_name_2_0= ruleQualifiedName ) ) (otherlv_3= ':' ( (lv_title_4_0= RULE_STRING ) ) )? (otherlv_5= 'for' ( ( ( ruleAadlClassifierReference ) ) | ( (lv_componentCategory_7_0= ruleComponentCategory ) )+ ) ) (otherlv_8= 'use' otherlv_9= 'constants' ( ( ruleQualifiedName ) )+ )? otherlv_11= '[' ( ( ( ( ({...}? => ( ({...}? => ( (lv_description_13_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_goals_15_0= ruleGoal ) ) )+ ) ) | ({...}? => ( ({...}? => (otherlv_16= 'see' otherlv_17= 'document' ( (lv_docReference_18_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'issues' ( (lv_issues_20_0= RULE_STRING ) )+ ) ) ) ) )* ) ) ) otherlv_21= ']'
            {
            otherlv_0=(Token)match(input,20,FollowSets000.FOLLOW_7); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getStakeholderGoalsAccess().getStakeholderKeyword_0());
              		
            }
            otherlv_1=(Token)match(input,21,FollowSets000.FOLLOW_4); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getStakeholderGoalsAccess().getGoalsKeyword_1());
              		
            }
            // InternalReqSpec.g:279:3: ( (lv_name_2_0= ruleQualifiedName ) )
            // InternalReqSpec.g:280:4: (lv_name_2_0= ruleQualifiedName )
            {
            // InternalReqSpec.g:280:4: (lv_name_2_0= ruleQualifiedName )
            // InternalReqSpec.g:281:5: lv_name_2_0= ruleQualifiedName
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getStakeholderGoalsAccess().getNameQualifiedNameParserRuleCall_2_0());
              				
            }
            pushFollow(FollowSets000.FOLLOW_8);
            lv_name_2_0=ruleQualifiedName();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getStakeholderGoalsRule());
              					}
              					set(
              						current,
              						"name",
              						lv_name_2_0,
              						"org.osate.alisa.common.Common.QualifiedName");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalReqSpec.g:298:3: (otherlv_3= ':' ( (lv_title_4_0= RULE_STRING ) ) )?
            int alt4=2;
            int LA4_0 = input.LA(1);

            if ( (LA4_0==22) ) {
                alt4=1;
            }
            switch (alt4) {
                case 1 :
                    // InternalReqSpec.g:299:4: otherlv_3= ':' ( (lv_title_4_0= RULE_STRING ) )
                    {
                    otherlv_3=(Token)match(input,22,FollowSets000.FOLLOW_9); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_3, grammarAccess.getStakeholderGoalsAccess().getColonKeyword_3_0());
                      			
                    }
                    // InternalReqSpec.g:303:4: ( (lv_title_4_0= RULE_STRING ) )
                    // InternalReqSpec.g:304:5: (lv_title_4_0= RULE_STRING )
                    {
                    // InternalReqSpec.g:304:5: (lv_title_4_0= RULE_STRING )
                    // InternalReqSpec.g:305:6: lv_title_4_0= RULE_STRING
                    {
                    lv_title_4_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_10); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_title_4_0, grammarAccess.getStakeholderGoalsAccess().getTitleSTRINGTerminalRuleCall_3_1_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getStakeholderGoalsRule());
                      						}
                      						setWithLastConsumed(
                      							current,
                      							"title",
                      							lv_title_4_0,
                      							"org.eclipse.xtext.common.Terminals.STRING");
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            // InternalReqSpec.g:322:3: (otherlv_5= 'for' ( ( ( ruleAadlClassifierReference ) ) | ( (lv_componentCategory_7_0= ruleComponentCategory ) )+ ) )
            // InternalReqSpec.g:323:4: otherlv_5= 'for' ( ( ( ruleAadlClassifierReference ) ) | ( (lv_componentCategory_7_0= ruleComponentCategory ) )+ )
            {
            otherlv_5=(Token)match(input,23,FollowSets000.FOLLOW_11); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_5, grammarAccess.getStakeholderGoalsAccess().getForKeyword_4_0());
              			
            }
            // InternalReqSpec.g:327:4: ( ( ( ruleAadlClassifierReference ) ) | ( (lv_componentCategory_7_0= ruleComponentCategory ) )+ )
            int alt6=2;
            int LA6_0 = input.LA(1);

            if ( (LA6_0==RULE_ID) ) {
                alt6=1;
            }
            else if ( (LA6_0==29||(LA6_0>=108 && LA6_0<=115)||(LA6_0>=117 && LA6_0<=118)) ) {
                alt6=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 6, 0, input);

                throw nvae;
            }
            switch (alt6) {
                case 1 :
                    // InternalReqSpec.g:328:5: ( ( ruleAadlClassifierReference ) )
                    {
                    // InternalReqSpec.g:328:5: ( ( ruleAadlClassifierReference ) )
                    // InternalReqSpec.g:329:6: ( ruleAadlClassifierReference )
                    {
                    // InternalReqSpec.g:329:6: ( ruleAadlClassifierReference )
                    // InternalReqSpec.g:330:7: ruleAadlClassifierReference
                    {
                    if ( state.backtracking==0 ) {

                      							if (current==null) {
                      								current = createModelElement(grammarAccess.getStakeholderGoalsRule());
                      							}
                      						
                    }
                    if ( state.backtracking==0 ) {

                      							newCompositeNode(grammarAccess.getStakeholderGoalsAccess().getTargetComponentClassifierCrossReference_4_1_0_0());
                      						
                    }
                    pushFollow(FollowSets000.FOLLOW_12);
                    ruleAadlClassifierReference();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							afterParserOrEnumRuleCall();
                      						
                    }

                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalReqSpec.g:345:5: ( (lv_componentCategory_7_0= ruleComponentCategory ) )+
                    {
                    // InternalReqSpec.g:345:5: ( (lv_componentCategory_7_0= ruleComponentCategory ) )+
                    int cnt5=0;
                    loop5:
                    do {
                        int alt5=2;
                        int LA5_0 = input.LA(1);

                        if ( (LA5_0==29||(LA5_0>=108 && LA5_0<=115)||(LA5_0>=117 && LA5_0<=118)) ) {
                            alt5=1;
                        }


                        switch (alt5) {
                    	case 1 :
                    	    // InternalReqSpec.g:346:6: (lv_componentCategory_7_0= ruleComponentCategory )
                    	    {
                    	    // InternalReqSpec.g:346:6: (lv_componentCategory_7_0= ruleComponentCategory )
                    	    // InternalReqSpec.g:347:7: lv_componentCategory_7_0= ruleComponentCategory
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      							newCompositeNode(grammarAccess.getStakeholderGoalsAccess().getComponentCategoryComponentCategoryParserRuleCall_4_1_1_0());
                    	      						
                    	    }
                    	    pushFollow(FollowSets000.FOLLOW_13);
                    	    lv_componentCategory_7_0=ruleComponentCategory();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      							if (current==null) {
                    	      								current = createModelElementForParent(grammarAccess.getStakeholderGoalsRule());
                    	      							}
                    	      							add(
                    	      								current,
                    	      								"componentCategory",
                    	      								lv_componentCategory_7_0,
                    	      								"org.osate.alisa.common.Common.ComponentCategory");
                    	      							afterParserOrEnumRuleCall();
                    	      						
                    	    }

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt5 >= 1 ) break loop5;
                    	    if (state.backtracking>0) {state.failed=true; return current;}
                                EarlyExitException eee =
                                    new EarlyExitException(5, input);
                                throw eee;
                        }
                        cnt5++;
                    } while (true);


                    }
                    break;

            }


            }

            // InternalReqSpec.g:366:3: (otherlv_8= 'use' otherlv_9= 'constants' ( ( ruleQualifiedName ) )+ )?
            int alt8=2;
            int LA8_0 = input.LA(1);

            if ( (LA8_0==24) ) {
                alt8=1;
            }
            switch (alt8) {
                case 1 :
                    // InternalReqSpec.g:367:4: otherlv_8= 'use' otherlv_9= 'constants' ( ( ruleQualifiedName ) )+
                    {
                    otherlv_8=(Token)match(input,24,FollowSets000.FOLLOW_14); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_8, grammarAccess.getStakeholderGoalsAccess().getUseKeyword_5_0());
                      			
                    }
                    otherlv_9=(Token)match(input,17,FollowSets000.FOLLOW_4); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_9, grammarAccess.getStakeholderGoalsAccess().getConstantsKeyword_5_1());
                      			
                    }
                    // InternalReqSpec.g:375:4: ( ( ruleQualifiedName ) )+
                    int cnt7=0;
                    loop7:
                    do {
                        int alt7=2;
                        int LA7_0 = input.LA(1);

                        if ( (LA7_0==RULE_ID) ) {
                            alt7=1;
                        }


                        switch (alt7) {
                    	case 1 :
                    	    // InternalReqSpec.g:376:5: ( ruleQualifiedName )
                    	    {
                    	    // InternalReqSpec.g:376:5: ( ruleQualifiedName )
                    	    // InternalReqSpec.g:377:6: ruleQualifiedName
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      						if (current==null) {
                    	      							current = createModelElement(grammarAccess.getStakeholderGoalsRule());
                    	      						}
                    	      					
                    	    }
                    	    if ( state.backtracking==0 ) {

                    	      						newCompositeNode(grammarAccess.getStakeholderGoalsAccess().getImportConstantsGlobalConstantsCrossReference_5_2_0());
                    	      					
                    	    }
                    	    pushFollow(FollowSets000.FOLLOW_15);
                    	    ruleQualifiedName();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      						afterParserOrEnumRuleCall();
                    	      					
                    	    }

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt7 >= 1 ) break loop7;
                    	    if (state.backtracking>0) {state.failed=true; return current;}
                                EarlyExitException eee =
                                    new EarlyExitException(7, input);
                                throw eee;
                        }
                        cnt7++;
                    } while (true);


                    }
                    break;

            }

            otherlv_11=(Token)match(input,18,FollowSets000.FOLLOW_16); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_11, grammarAccess.getStakeholderGoalsAccess().getLeftSquareBracketKeyword_6());
              		
            }
            // InternalReqSpec.g:396:3: ( ( ( ( ({...}? => ( ({...}? => ( (lv_description_13_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_goals_15_0= ruleGoal ) ) )+ ) ) | ({...}? => ( ({...}? => (otherlv_16= 'see' otherlv_17= 'document' ( (lv_docReference_18_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'issues' ( (lv_issues_20_0= RULE_STRING ) )+ ) ) ) ) )* ) ) )
            // InternalReqSpec.g:397:4: ( ( ( ({...}? => ( ({...}? => ( (lv_description_13_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_goals_15_0= ruleGoal ) ) )+ ) ) | ({...}? => ( ({...}? => (otherlv_16= 'see' otherlv_17= 'document' ( (lv_docReference_18_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'issues' ( (lv_issues_20_0= RULE_STRING ) )+ ) ) ) ) )* ) )
            {
            // InternalReqSpec.g:397:4: ( ( ( ({...}? => ( ({...}? => ( (lv_description_13_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_goals_15_0= ruleGoal ) ) )+ ) ) | ({...}? => ( ({...}? => (otherlv_16= 'see' otherlv_17= 'document' ( (lv_docReference_18_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'issues' ( (lv_issues_20_0= RULE_STRING ) )+ ) ) ) ) )* ) )
            // InternalReqSpec.g:398:5: ( ( ({...}? => ( ({...}? => ( (lv_description_13_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_goals_15_0= ruleGoal ) ) )+ ) ) | ({...}? => ( ({...}? => (otherlv_16= 'see' otherlv_17= 'document' ( (lv_docReference_18_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'issues' ( (lv_issues_20_0= RULE_STRING ) )+ ) ) ) ) )* )
            {
            getUnorderedGroupHelper().enter(grammarAccess.getStakeholderGoalsAccess().getUnorderedGroup_7());
            // InternalReqSpec.g:401:5: ( ( ({...}? => ( ({...}? => ( (lv_description_13_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_goals_15_0= ruleGoal ) ) )+ ) ) | ({...}? => ( ({...}? => (otherlv_16= 'see' otherlv_17= 'document' ( (lv_docReference_18_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'issues' ( (lv_issues_20_0= RULE_STRING ) )+ ) ) ) ) )* )
            // InternalReqSpec.g:402:6: ( ({...}? => ( ({...}? => ( (lv_description_13_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_goals_15_0= ruleGoal ) ) )+ ) ) | ({...}? => ( ({...}? => (otherlv_16= 'see' otherlv_17= 'document' ( (lv_docReference_18_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'issues' ( (lv_issues_20_0= RULE_STRING ) )+ ) ) ) ) )*
            {
            // InternalReqSpec.g:402:6: ( ({...}? => ( ({...}? => ( (lv_description_13_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_goals_15_0= ruleGoal ) ) )+ ) ) | ({...}? => ( ({...}? => (otherlv_16= 'see' otherlv_17= 'document' ( (lv_docReference_18_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'issues' ( (lv_issues_20_0= RULE_STRING ) )+ ) ) ) ) )*
            loop13:
            do {
                int alt13=6;
                int LA13_0 = input.LA(1);

                if ( LA13_0 == 66 && getUnorderedGroupHelper().canSelect(grammarAccess.getStakeholderGoalsAccess().getUnorderedGroup_7(), 0) ) {
                    alt13=1;
                }
                else if ( LA13_0 == 60 && getUnorderedGroupHelper().canSelect(grammarAccess.getStakeholderGoalsAccess().getUnorderedGroup_7(), 1) ) {
                    alt13=2;
                }
                else if ( LA13_0 == 32 && getUnorderedGroupHelper().canSelect(grammarAccess.getStakeholderGoalsAccess().getUnorderedGroup_7(), 2) ) {
                    alt13=3;
                }
                else if ( LA13_0 == 25 && getUnorderedGroupHelper().canSelect(grammarAccess.getStakeholderGoalsAccess().getUnorderedGroup_7(), 3) ) {
                    alt13=4;
                }
                else if ( LA13_0 == 27 && getUnorderedGroupHelper().canSelect(grammarAccess.getStakeholderGoalsAccess().getUnorderedGroup_7(), 4) ) {
                    alt13=5;
                }


                switch (alt13) {
            	case 1 :
            	    // InternalReqSpec.g:403:4: ({...}? => ( ({...}? => ( (lv_description_13_0= ruleDescription ) ) ) ) )
            	    {
            	    // InternalReqSpec.g:403:4: ({...}? => ( ({...}? => ( (lv_description_13_0= ruleDescription ) ) ) ) )
            	    // InternalReqSpec.g:404:5: {...}? => ( ({...}? => ( (lv_description_13_0= ruleDescription ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getStakeholderGoalsAccess().getUnorderedGroup_7(), 0) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleStakeholderGoals", "getUnorderedGroupHelper().canSelect(grammarAccess.getStakeholderGoalsAccess().getUnorderedGroup_7(), 0)");
            	    }
            	    // InternalReqSpec.g:404:113: ( ({...}? => ( (lv_description_13_0= ruleDescription ) ) ) )
            	    // InternalReqSpec.g:405:6: ({...}? => ( (lv_description_13_0= ruleDescription ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getStakeholderGoalsAccess().getUnorderedGroup_7(), 0);
            	    // InternalReqSpec.g:408:9: ({...}? => ( (lv_description_13_0= ruleDescription ) ) )
            	    // InternalReqSpec.g:408:10: {...}? => ( (lv_description_13_0= ruleDescription ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleStakeholderGoals", "true");
            	    }
            	    // InternalReqSpec.g:408:19: ( (lv_description_13_0= ruleDescription ) )
            	    // InternalReqSpec.g:408:20: (lv_description_13_0= ruleDescription )
            	    {
            	    // InternalReqSpec.g:408:20: (lv_description_13_0= ruleDescription )
            	    // InternalReqSpec.g:409:10: lv_description_13_0= ruleDescription
            	    {
            	    if ( state.backtracking==0 ) {

            	      										newCompositeNode(grammarAccess.getStakeholderGoalsAccess().getDescriptionDescriptionParserRuleCall_7_0_0());
            	      									
            	    }
            	    pushFollow(FollowSets000.FOLLOW_16);
            	    lv_description_13_0=ruleDescription();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      										if (current==null) {
            	      											current = createModelElementForParent(grammarAccess.getStakeholderGoalsRule());
            	      										}
            	      										set(
            	      											current,
            	      											"description",
            	      											lv_description_13_0,
            	      											"org.osate.alisa.common.Common.Description");
            	      										afterParserOrEnumRuleCall();
            	      									
            	    }

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getStakeholderGoalsAccess().getUnorderedGroup_7());

            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // InternalReqSpec.g:431:4: ({...}? => ( ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+ ) )
            	    {
            	    // InternalReqSpec.g:431:4: ({...}? => ( ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+ ) )
            	    // InternalReqSpec.g:432:5: {...}? => ( ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+ )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getStakeholderGoalsAccess().getUnorderedGroup_7(), 1) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleStakeholderGoals", "getUnorderedGroupHelper().canSelect(grammarAccess.getStakeholderGoalsAccess().getUnorderedGroup_7(), 1)");
            	    }
            	    // InternalReqSpec.g:432:113: ( ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+ )
            	    // InternalReqSpec.g:433:6: ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getStakeholderGoalsAccess().getUnorderedGroup_7(), 1);
            	    // InternalReqSpec.g:436:9: ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+
            	    int cnt9=0;
            	    loop9:
            	    do {
            	        int alt9=2;
            	        int LA9_0 = input.LA(1);

            	        if ( (LA9_0==60) ) {
            	            int LA9_2 = input.LA(2);

            	            if ( ((true)) ) {
            	                alt9=1;
            	            }


            	        }


            	        switch (alt9) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:436:10: {...}? => ( (lv_constants_14_0= ruleValDeclaration ) )
            	    	    {
            	    	    if ( !((true)) ) {
            	    	        if (state.backtracking>0) {state.failed=true; return current;}
            	    	        throw new FailedPredicateException(input, "ruleStakeholderGoals", "true");
            	    	    }
            	    	    // InternalReqSpec.g:436:19: ( (lv_constants_14_0= ruleValDeclaration ) )
            	    	    // InternalReqSpec.g:436:20: (lv_constants_14_0= ruleValDeclaration )
            	    	    {
            	    	    // InternalReqSpec.g:436:20: (lv_constants_14_0= ruleValDeclaration )
            	    	    // InternalReqSpec.g:437:10: lv_constants_14_0= ruleValDeclaration
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      										newCompositeNode(grammarAccess.getStakeholderGoalsAccess().getConstantsValDeclarationParserRuleCall_7_1_0());
            	    	      									
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_16);
            	    	    lv_constants_14_0=ruleValDeclaration();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      										if (current==null) {
            	    	      											current = createModelElementForParent(grammarAccess.getStakeholderGoalsRule());
            	    	      										}
            	    	      										add(
            	    	      											current,
            	    	      											"constants",
            	    	      											lv_constants_14_0,
            	    	      											"org.osate.reqspec.ReqSpec.ValDeclaration");
            	    	      										afterParserOrEnumRuleCall();
            	    	      									
            	    	    }

            	    	    }


            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt9 >= 1 ) break loop9;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(9, input);
            	                throw eee;
            	        }
            	        cnt9++;
            	    } while (true);

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getStakeholderGoalsAccess().getUnorderedGroup_7());

            	    }


            	    }


            	    }
            	    break;
            	case 3 :
            	    // InternalReqSpec.g:459:4: ({...}? => ( ({...}? => ( (lv_goals_15_0= ruleGoal ) ) )+ ) )
            	    {
            	    // InternalReqSpec.g:459:4: ({...}? => ( ({...}? => ( (lv_goals_15_0= ruleGoal ) ) )+ ) )
            	    // InternalReqSpec.g:460:5: {...}? => ( ({...}? => ( (lv_goals_15_0= ruleGoal ) ) )+ )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getStakeholderGoalsAccess().getUnorderedGroup_7(), 2) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleStakeholderGoals", "getUnorderedGroupHelper().canSelect(grammarAccess.getStakeholderGoalsAccess().getUnorderedGroup_7(), 2)");
            	    }
            	    // InternalReqSpec.g:460:113: ( ({...}? => ( (lv_goals_15_0= ruleGoal ) ) )+ )
            	    // InternalReqSpec.g:461:6: ({...}? => ( (lv_goals_15_0= ruleGoal ) ) )+
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getStakeholderGoalsAccess().getUnorderedGroup_7(), 2);
            	    // InternalReqSpec.g:464:9: ({...}? => ( (lv_goals_15_0= ruleGoal ) ) )+
            	    int cnt10=0;
            	    loop10:
            	    do {
            	        int alt10=2;
            	        int LA10_0 = input.LA(1);

            	        if ( (LA10_0==32) ) {
            	            int LA10_2 = input.LA(2);

            	            if ( ((true)) ) {
            	                alt10=1;
            	            }


            	        }


            	        switch (alt10) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:464:10: {...}? => ( (lv_goals_15_0= ruleGoal ) )
            	    	    {
            	    	    if ( !((true)) ) {
            	    	        if (state.backtracking>0) {state.failed=true; return current;}
            	    	        throw new FailedPredicateException(input, "ruleStakeholderGoals", "true");
            	    	    }
            	    	    // InternalReqSpec.g:464:19: ( (lv_goals_15_0= ruleGoal ) )
            	    	    // InternalReqSpec.g:464:20: (lv_goals_15_0= ruleGoal )
            	    	    {
            	    	    // InternalReqSpec.g:464:20: (lv_goals_15_0= ruleGoal )
            	    	    // InternalReqSpec.g:465:10: lv_goals_15_0= ruleGoal
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      										newCompositeNode(grammarAccess.getStakeholderGoalsAccess().getGoalsGoalParserRuleCall_7_2_0());
            	    	      									
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_16);
            	    	    lv_goals_15_0=ruleGoal();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      										if (current==null) {
            	    	      											current = createModelElementForParent(grammarAccess.getStakeholderGoalsRule());
            	    	      										}
            	    	      										add(
            	    	      											current,
            	    	      											"goals",
            	    	      											lv_goals_15_0,
            	    	      											"org.osate.reqspec.ReqSpec.Goal");
            	    	      										afterParserOrEnumRuleCall();
            	    	      									
            	    	    }

            	    	    }


            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt10 >= 1 ) break loop10;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(10, input);
            	                throw eee;
            	        }
            	        cnt10++;
            	    } while (true);

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getStakeholderGoalsAccess().getUnorderedGroup_7());

            	    }


            	    }


            	    }
            	    break;
            	case 4 :
            	    // InternalReqSpec.g:487:4: ({...}? => ( ({...}? => (otherlv_16= 'see' otherlv_17= 'document' ( (lv_docReference_18_0= ruleExternalDocument ) )+ ) ) ) )
            	    {
            	    // InternalReqSpec.g:487:4: ({...}? => ( ({...}? => (otherlv_16= 'see' otherlv_17= 'document' ( (lv_docReference_18_0= ruleExternalDocument ) )+ ) ) ) )
            	    // InternalReqSpec.g:488:5: {...}? => ( ({...}? => (otherlv_16= 'see' otherlv_17= 'document' ( (lv_docReference_18_0= ruleExternalDocument ) )+ ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getStakeholderGoalsAccess().getUnorderedGroup_7(), 3) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleStakeholderGoals", "getUnorderedGroupHelper().canSelect(grammarAccess.getStakeholderGoalsAccess().getUnorderedGroup_7(), 3)");
            	    }
            	    // InternalReqSpec.g:488:113: ( ({...}? => (otherlv_16= 'see' otherlv_17= 'document' ( (lv_docReference_18_0= ruleExternalDocument ) )+ ) ) )
            	    // InternalReqSpec.g:489:6: ({...}? => (otherlv_16= 'see' otherlv_17= 'document' ( (lv_docReference_18_0= ruleExternalDocument ) )+ ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getStakeholderGoalsAccess().getUnorderedGroup_7(), 3);
            	    // InternalReqSpec.g:492:9: ({...}? => (otherlv_16= 'see' otherlv_17= 'document' ( (lv_docReference_18_0= ruleExternalDocument ) )+ ) )
            	    // InternalReqSpec.g:492:10: {...}? => (otherlv_16= 'see' otherlv_17= 'document' ( (lv_docReference_18_0= ruleExternalDocument ) )+ )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleStakeholderGoals", "true");
            	    }
            	    // InternalReqSpec.g:492:19: (otherlv_16= 'see' otherlv_17= 'document' ( (lv_docReference_18_0= ruleExternalDocument ) )+ )
            	    // InternalReqSpec.g:492:20: otherlv_16= 'see' otherlv_17= 'document' ( (lv_docReference_18_0= ruleExternalDocument ) )+
            	    {
            	    otherlv_16=(Token)match(input,25,FollowSets000.FOLLOW_17); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_16, grammarAccess.getStakeholderGoalsAccess().getSeeKeyword_7_3_0());
            	      								
            	    }
            	    otherlv_17=(Token)match(input,26,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_17, grammarAccess.getStakeholderGoalsAccess().getDocumentKeyword_7_3_1());
            	      								
            	    }
            	    // InternalReqSpec.g:500:9: ( (lv_docReference_18_0= ruleExternalDocument ) )+
            	    int cnt11=0;
            	    loop11:
            	    do {
            	        int alt11=2;
            	        int LA11_0 = input.LA(1);

            	        if ( (LA11_0==RULE_ID) ) {
            	            alt11=1;
            	        }


            	        switch (alt11) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:501:10: (lv_docReference_18_0= ruleExternalDocument )
            	    	    {
            	    	    // InternalReqSpec.g:501:10: (lv_docReference_18_0= ruleExternalDocument )
            	    	    // InternalReqSpec.g:502:11: lv_docReference_18_0= ruleExternalDocument
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      											newCompositeNode(grammarAccess.getStakeholderGoalsAccess().getDocReferenceExternalDocumentParserRuleCall_7_3_2_0());
            	    	      										
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_18);
            	    	    lv_docReference_18_0=ruleExternalDocument();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      											if (current==null) {
            	    	      												current = createModelElementForParent(grammarAccess.getStakeholderGoalsRule());
            	    	      											}
            	    	      											add(
            	    	      												current,
            	    	      												"docReference",
            	    	      												lv_docReference_18_0,
            	    	      												"org.osate.reqspec.ReqSpec.ExternalDocument");
            	    	      											afterParserOrEnumRuleCall();
            	    	      										
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt11 >= 1 ) break loop11;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(11, input);
            	                throw eee;
            	        }
            	        cnt11++;
            	    } while (true);


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getStakeholderGoalsAccess().getUnorderedGroup_7());

            	    }


            	    }


            	    }
            	    break;
            	case 5 :
            	    // InternalReqSpec.g:525:4: ({...}? => ( ({...}? => (otherlv_19= 'issues' ( (lv_issues_20_0= RULE_STRING ) )+ ) ) ) )
            	    {
            	    // InternalReqSpec.g:525:4: ({...}? => ( ({...}? => (otherlv_19= 'issues' ( (lv_issues_20_0= RULE_STRING ) )+ ) ) ) )
            	    // InternalReqSpec.g:526:5: {...}? => ( ({...}? => (otherlv_19= 'issues' ( (lv_issues_20_0= RULE_STRING ) )+ ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getStakeholderGoalsAccess().getUnorderedGroup_7(), 4) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleStakeholderGoals", "getUnorderedGroupHelper().canSelect(grammarAccess.getStakeholderGoalsAccess().getUnorderedGroup_7(), 4)");
            	    }
            	    // InternalReqSpec.g:526:113: ( ({...}? => (otherlv_19= 'issues' ( (lv_issues_20_0= RULE_STRING ) )+ ) ) )
            	    // InternalReqSpec.g:527:6: ({...}? => (otherlv_19= 'issues' ( (lv_issues_20_0= RULE_STRING ) )+ ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getStakeholderGoalsAccess().getUnorderedGroup_7(), 4);
            	    // InternalReqSpec.g:530:9: ({...}? => (otherlv_19= 'issues' ( (lv_issues_20_0= RULE_STRING ) )+ ) )
            	    // InternalReqSpec.g:530:10: {...}? => (otherlv_19= 'issues' ( (lv_issues_20_0= RULE_STRING ) )+ )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleStakeholderGoals", "true");
            	    }
            	    // InternalReqSpec.g:530:19: (otherlv_19= 'issues' ( (lv_issues_20_0= RULE_STRING ) )+ )
            	    // InternalReqSpec.g:530:20: otherlv_19= 'issues' ( (lv_issues_20_0= RULE_STRING ) )+
            	    {
            	    otherlv_19=(Token)match(input,27,FollowSets000.FOLLOW_9); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_19, grammarAccess.getStakeholderGoalsAccess().getIssuesKeyword_7_4_0());
            	      								
            	    }
            	    // InternalReqSpec.g:534:9: ( (lv_issues_20_0= RULE_STRING ) )+
            	    int cnt12=0;
            	    loop12:
            	    do {
            	        int alt12=2;
            	        int LA12_0 = input.LA(1);

            	        if ( (LA12_0==RULE_STRING) ) {
            	            alt12=1;
            	        }


            	        switch (alt12) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:535:10: (lv_issues_20_0= RULE_STRING )
            	    	    {
            	    	    // InternalReqSpec.g:535:10: (lv_issues_20_0= RULE_STRING )
            	    	    // InternalReqSpec.g:536:11: lv_issues_20_0= RULE_STRING
            	    	    {
            	    	    lv_issues_20_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_19); if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      											newLeafNode(lv_issues_20_0, grammarAccess.getStakeholderGoalsAccess().getIssuesSTRINGTerminalRuleCall_7_4_1_0());
            	    	      										
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      											if (current==null) {
            	    	      												current = createModelElement(grammarAccess.getStakeholderGoalsRule());
            	    	      											}
            	    	      											addWithLastConsumed(
            	    	      												current,
            	    	      												"issues",
            	    	      												lv_issues_20_0,
            	    	      												"org.eclipse.xtext.common.Terminals.STRING");
            	    	      										
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt12 >= 1 ) break loop12;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(12, input);
            	                throw eee;
            	        }
            	        cnt12++;
            	    } while (true);


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getStakeholderGoalsAccess().getUnorderedGroup_7());

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop13;
                }
            } while (true);


            }


            }

            getUnorderedGroupHelper().leave(grammarAccess.getStakeholderGoalsAccess().getUnorderedGroup_7());

            }

            otherlv_21=(Token)match(input,19,FollowSets000.FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_21, grammarAccess.getStakeholderGoalsAccess().getRightSquareBracketKeyword_8());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleStakeholderGoals"


    // $ANTLR start "entryRuleReqDocument"
    // InternalReqSpec.g:573:1: entryRuleReqDocument returns [EObject current=null] : iv_ruleReqDocument= ruleReqDocument EOF ;
    public final EObject entryRuleReqDocument() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleReqDocument = null;


        try {
            // InternalReqSpec.g:573:52: (iv_ruleReqDocument= ruleReqDocument EOF )
            // InternalReqSpec.g:574:2: iv_ruleReqDocument= ruleReqDocument EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getReqDocumentRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleReqDocument=ruleReqDocument();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleReqDocument; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleReqDocument"


    // $ANTLR start "ruleReqDocument"
    // InternalReqSpec.g:580:1: ruleReqDocument returns [EObject current=null] : (otherlv_0= 'document' ( (lv_name_1_0= ruleQualifiedName ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? otherlv_4= '[' ( ( ( ( ({...}? => ( ({...}? => ( (lv_description_6_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_content_7_1= ruleDocGoal | lv_content_7_2= ruleDocRequirement | lv_content_7_3= ruleDocumentSection ) ) ) )+ ) ) | ({...}? => ( ({...}? => (otherlv_8= 'see' otherlv_9= 'document' ( (lv_docReference_10_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_11= 'issues' ( (lv_issues_12_0= RULE_STRING ) )+ ) ) ) ) )* ) ) ) otherlv_13= ']' ) ;
    public final EObject ruleReqDocument() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_2=null;
        Token lv_title_3_0=null;
        Token otherlv_4=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        Token otherlv_11=null;
        Token lv_issues_12_0=null;
        Token otherlv_13=null;
        AntlrDatatypeRuleToken lv_name_1_0 = null;

        EObject lv_description_6_0 = null;

        EObject lv_content_7_1 = null;

        EObject lv_content_7_2 = null;

        EObject lv_content_7_3 = null;

        EObject lv_docReference_10_0 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:586:2: ( (otherlv_0= 'document' ( (lv_name_1_0= ruleQualifiedName ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? otherlv_4= '[' ( ( ( ( ({...}? => ( ({...}? => ( (lv_description_6_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_content_7_1= ruleDocGoal | lv_content_7_2= ruleDocRequirement | lv_content_7_3= ruleDocumentSection ) ) ) )+ ) ) | ({...}? => ( ({...}? => (otherlv_8= 'see' otherlv_9= 'document' ( (lv_docReference_10_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_11= 'issues' ( (lv_issues_12_0= RULE_STRING ) )+ ) ) ) ) )* ) ) ) otherlv_13= ']' ) )
            // InternalReqSpec.g:587:2: (otherlv_0= 'document' ( (lv_name_1_0= ruleQualifiedName ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? otherlv_4= '[' ( ( ( ( ({...}? => ( ({...}? => ( (lv_description_6_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_content_7_1= ruleDocGoal | lv_content_7_2= ruleDocRequirement | lv_content_7_3= ruleDocumentSection ) ) ) )+ ) ) | ({...}? => ( ({...}? => (otherlv_8= 'see' otherlv_9= 'document' ( (lv_docReference_10_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_11= 'issues' ( (lv_issues_12_0= RULE_STRING ) )+ ) ) ) ) )* ) ) ) otherlv_13= ']' )
            {
            // InternalReqSpec.g:587:2: (otherlv_0= 'document' ( (lv_name_1_0= ruleQualifiedName ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? otherlv_4= '[' ( ( ( ( ({...}? => ( ({...}? => ( (lv_description_6_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_content_7_1= ruleDocGoal | lv_content_7_2= ruleDocRequirement | lv_content_7_3= ruleDocumentSection ) ) ) )+ ) ) | ({...}? => ( ({...}? => (otherlv_8= 'see' otherlv_9= 'document' ( (lv_docReference_10_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_11= 'issues' ( (lv_issues_12_0= RULE_STRING ) )+ ) ) ) ) )* ) ) ) otherlv_13= ']' )
            // InternalReqSpec.g:588:3: otherlv_0= 'document' ( (lv_name_1_0= ruleQualifiedName ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? otherlv_4= '[' ( ( ( ( ({...}? => ( ({...}? => ( (lv_description_6_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_content_7_1= ruleDocGoal | lv_content_7_2= ruleDocRequirement | lv_content_7_3= ruleDocumentSection ) ) ) )+ ) ) | ({...}? => ( ({...}? => (otherlv_8= 'see' otherlv_9= 'document' ( (lv_docReference_10_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_11= 'issues' ( (lv_issues_12_0= RULE_STRING ) )+ ) ) ) ) )* ) ) ) otherlv_13= ']'
            {
            otherlv_0=(Token)match(input,26,FollowSets000.FOLLOW_4); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getReqDocumentAccess().getDocumentKeyword_0());
              		
            }
            // InternalReqSpec.g:592:3: ( (lv_name_1_0= ruleQualifiedName ) )
            // InternalReqSpec.g:593:4: (lv_name_1_0= ruleQualifiedName )
            {
            // InternalReqSpec.g:593:4: (lv_name_1_0= ruleQualifiedName )
            // InternalReqSpec.g:594:5: lv_name_1_0= ruleQualifiedName
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getReqDocumentAccess().getNameQualifiedNameParserRuleCall_1_0());
              				
            }
            pushFollow(FollowSets000.FOLLOW_20);
            lv_name_1_0=ruleQualifiedName();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getReqDocumentRule());
              					}
              					set(
              						current,
              						"name",
              						lv_name_1_0,
              						"org.osate.alisa.common.Common.QualifiedName");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalReqSpec.g:611:3: (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )?
            int alt14=2;
            int LA14_0 = input.LA(1);

            if ( (LA14_0==22) ) {
                alt14=1;
            }
            switch (alt14) {
                case 1 :
                    // InternalReqSpec.g:612:4: otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) )
                    {
                    otherlv_2=(Token)match(input,22,FollowSets000.FOLLOW_9); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_2, grammarAccess.getReqDocumentAccess().getColonKeyword_2_0());
                      			
                    }
                    // InternalReqSpec.g:616:4: ( (lv_title_3_0= RULE_STRING ) )
                    // InternalReqSpec.g:617:5: (lv_title_3_0= RULE_STRING )
                    {
                    // InternalReqSpec.g:617:5: (lv_title_3_0= RULE_STRING )
                    // InternalReqSpec.g:618:6: lv_title_3_0= RULE_STRING
                    {
                    lv_title_3_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_5); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_title_3_0, grammarAccess.getReqDocumentAccess().getTitleSTRINGTerminalRuleCall_2_1_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getReqDocumentRule());
                      						}
                      						setWithLastConsumed(
                      							current,
                      							"title",
                      							lv_title_3_0,
                      							"org.eclipse.xtext.common.Terminals.STRING");
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            otherlv_4=(Token)match(input,18,FollowSets000.FOLLOW_21); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_4, grammarAccess.getReqDocumentAccess().getLeftSquareBracketKeyword_3());
              		
            }
            // InternalReqSpec.g:639:3: ( ( ( ( ({...}? => ( ({...}? => ( (lv_description_6_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_content_7_1= ruleDocGoal | lv_content_7_2= ruleDocRequirement | lv_content_7_3= ruleDocumentSection ) ) ) )+ ) ) | ({...}? => ( ({...}? => (otherlv_8= 'see' otherlv_9= 'document' ( (lv_docReference_10_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_11= 'issues' ( (lv_issues_12_0= RULE_STRING ) )+ ) ) ) ) )* ) ) )
            // InternalReqSpec.g:640:4: ( ( ( ({...}? => ( ({...}? => ( (lv_description_6_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_content_7_1= ruleDocGoal | lv_content_7_2= ruleDocRequirement | lv_content_7_3= ruleDocumentSection ) ) ) )+ ) ) | ({...}? => ( ({...}? => (otherlv_8= 'see' otherlv_9= 'document' ( (lv_docReference_10_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_11= 'issues' ( (lv_issues_12_0= RULE_STRING ) )+ ) ) ) ) )* ) )
            {
            // InternalReqSpec.g:640:4: ( ( ( ({...}? => ( ({...}? => ( (lv_description_6_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_content_7_1= ruleDocGoal | lv_content_7_2= ruleDocRequirement | lv_content_7_3= ruleDocumentSection ) ) ) )+ ) ) | ({...}? => ( ({...}? => (otherlv_8= 'see' otherlv_9= 'document' ( (lv_docReference_10_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_11= 'issues' ( (lv_issues_12_0= RULE_STRING ) )+ ) ) ) ) )* ) )
            // InternalReqSpec.g:641:5: ( ( ({...}? => ( ({...}? => ( (lv_description_6_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_content_7_1= ruleDocGoal | lv_content_7_2= ruleDocRequirement | lv_content_7_3= ruleDocumentSection ) ) ) )+ ) ) | ({...}? => ( ({...}? => (otherlv_8= 'see' otherlv_9= 'document' ( (lv_docReference_10_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_11= 'issues' ( (lv_issues_12_0= RULE_STRING ) )+ ) ) ) ) )* )
            {
            getUnorderedGroupHelper().enter(grammarAccess.getReqDocumentAccess().getUnorderedGroup_4());
            // InternalReqSpec.g:644:5: ( ( ({...}? => ( ({...}? => ( (lv_description_6_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_content_7_1= ruleDocGoal | lv_content_7_2= ruleDocRequirement | lv_content_7_3= ruleDocumentSection ) ) ) )+ ) ) | ({...}? => ( ({...}? => (otherlv_8= 'see' otherlv_9= 'document' ( (lv_docReference_10_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_11= 'issues' ( (lv_issues_12_0= RULE_STRING ) )+ ) ) ) ) )* )
            // InternalReqSpec.g:645:6: ( ({...}? => ( ({...}? => ( (lv_description_6_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_content_7_1= ruleDocGoal | lv_content_7_2= ruleDocRequirement | lv_content_7_3= ruleDocumentSection ) ) ) )+ ) ) | ({...}? => ( ({...}? => (otherlv_8= 'see' otherlv_9= 'document' ( (lv_docReference_10_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_11= 'issues' ( (lv_issues_12_0= RULE_STRING ) )+ ) ) ) ) )*
            {
            // InternalReqSpec.g:645:6: ( ({...}? => ( ({...}? => ( (lv_description_6_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_content_7_1= ruleDocGoal | lv_content_7_2= ruleDocRequirement | lv_content_7_3= ruleDocumentSection ) ) ) )+ ) ) | ({...}? => ( ({...}? => (otherlv_8= 'see' otherlv_9= 'document' ( (lv_docReference_10_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_11= 'issues' ( (lv_issues_12_0= RULE_STRING ) )+ ) ) ) ) )*
            loop19:
            do {
                int alt19=5;
                int LA19_0 = input.LA(1);

                if ( LA19_0 == 66 && getUnorderedGroupHelper().canSelect(grammarAccess.getReqDocumentAccess().getUnorderedGroup_4(), 0) ) {
                    alt19=1;
                }
                else if ( ( LA19_0 == 28 || LA19_0 == 32 || LA19_0 == 39 ) && getUnorderedGroupHelper().canSelect(grammarAccess.getReqDocumentAccess().getUnorderedGroup_4(), 1) ) {
                    alt19=2;
                }
                else if ( LA19_0 == 25 && getUnorderedGroupHelper().canSelect(grammarAccess.getReqDocumentAccess().getUnorderedGroup_4(), 2) ) {
                    alt19=3;
                }
                else if ( LA19_0 == 27 && getUnorderedGroupHelper().canSelect(grammarAccess.getReqDocumentAccess().getUnorderedGroup_4(), 3) ) {
                    alt19=4;
                }


                switch (alt19) {
            	case 1 :
            	    // InternalReqSpec.g:646:4: ({...}? => ( ({...}? => ( (lv_description_6_0= ruleDescription ) ) ) ) )
            	    {
            	    // InternalReqSpec.g:646:4: ({...}? => ( ({...}? => ( (lv_description_6_0= ruleDescription ) ) ) ) )
            	    // InternalReqSpec.g:647:5: {...}? => ( ({...}? => ( (lv_description_6_0= ruleDescription ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReqDocumentAccess().getUnorderedGroup_4(), 0) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleReqDocument", "getUnorderedGroupHelper().canSelect(grammarAccess.getReqDocumentAccess().getUnorderedGroup_4(), 0)");
            	    }
            	    // InternalReqSpec.g:647:108: ( ({...}? => ( (lv_description_6_0= ruleDescription ) ) ) )
            	    // InternalReqSpec.g:648:6: ({...}? => ( (lv_description_6_0= ruleDescription ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getReqDocumentAccess().getUnorderedGroup_4(), 0);
            	    // InternalReqSpec.g:651:9: ({...}? => ( (lv_description_6_0= ruleDescription ) ) )
            	    // InternalReqSpec.g:651:10: {...}? => ( (lv_description_6_0= ruleDescription ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleReqDocument", "true");
            	    }
            	    // InternalReqSpec.g:651:19: ( (lv_description_6_0= ruleDescription ) )
            	    // InternalReqSpec.g:651:20: (lv_description_6_0= ruleDescription )
            	    {
            	    // InternalReqSpec.g:651:20: (lv_description_6_0= ruleDescription )
            	    // InternalReqSpec.g:652:10: lv_description_6_0= ruleDescription
            	    {
            	    if ( state.backtracking==0 ) {

            	      										newCompositeNode(grammarAccess.getReqDocumentAccess().getDescriptionDescriptionParserRuleCall_4_0_0());
            	      									
            	    }
            	    pushFollow(FollowSets000.FOLLOW_21);
            	    lv_description_6_0=ruleDescription();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      										if (current==null) {
            	      											current = createModelElementForParent(grammarAccess.getReqDocumentRule());
            	      										}
            	      										set(
            	      											current,
            	      											"description",
            	      											lv_description_6_0,
            	      											"org.osate.alisa.common.Common.Description");
            	      										afterParserOrEnumRuleCall();
            	      									
            	    }

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReqDocumentAccess().getUnorderedGroup_4());

            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // InternalReqSpec.g:674:4: ({...}? => ( ({...}? => ( ( (lv_content_7_1= ruleDocGoal | lv_content_7_2= ruleDocRequirement | lv_content_7_3= ruleDocumentSection ) ) ) )+ ) )
            	    {
            	    // InternalReqSpec.g:674:4: ({...}? => ( ({...}? => ( ( (lv_content_7_1= ruleDocGoal | lv_content_7_2= ruleDocRequirement | lv_content_7_3= ruleDocumentSection ) ) ) )+ ) )
            	    // InternalReqSpec.g:675:5: {...}? => ( ({...}? => ( ( (lv_content_7_1= ruleDocGoal | lv_content_7_2= ruleDocRequirement | lv_content_7_3= ruleDocumentSection ) ) ) )+ )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReqDocumentAccess().getUnorderedGroup_4(), 1) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleReqDocument", "getUnorderedGroupHelper().canSelect(grammarAccess.getReqDocumentAccess().getUnorderedGroup_4(), 1)");
            	    }
            	    // InternalReqSpec.g:675:108: ( ({...}? => ( ( (lv_content_7_1= ruleDocGoal | lv_content_7_2= ruleDocRequirement | lv_content_7_3= ruleDocumentSection ) ) ) )+ )
            	    // InternalReqSpec.g:676:6: ({...}? => ( ( (lv_content_7_1= ruleDocGoal | lv_content_7_2= ruleDocRequirement | lv_content_7_3= ruleDocumentSection ) ) ) )+
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getReqDocumentAccess().getUnorderedGroup_4(), 1);
            	    // InternalReqSpec.g:679:9: ({...}? => ( ( (lv_content_7_1= ruleDocGoal | lv_content_7_2= ruleDocRequirement | lv_content_7_3= ruleDocumentSection ) ) ) )+
            	    int cnt16=0;
            	    loop16:
            	    do {
            	        int alt16=2;
            	        switch ( input.LA(1) ) {
            	        case 32:
            	            {
            	            int LA16_2 = input.LA(2);

            	            if ( ((true)) ) {
            	                alt16=1;
            	            }


            	            }
            	            break;
            	        case 39:
            	            {
            	            int LA16_3 = input.LA(2);

            	            if ( ((true)) ) {
            	                alt16=1;
            	            }


            	            }
            	            break;
            	        case 28:
            	            {
            	            int LA16_4 = input.LA(2);

            	            if ( ((true)) ) {
            	                alt16=1;
            	            }


            	            }
            	            break;

            	        }

            	        switch (alt16) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:679:10: {...}? => ( ( (lv_content_7_1= ruleDocGoal | lv_content_7_2= ruleDocRequirement | lv_content_7_3= ruleDocumentSection ) ) )
            	    	    {
            	    	    if ( !((true)) ) {
            	    	        if (state.backtracking>0) {state.failed=true; return current;}
            	    	        throw new FailedPredicateException(input, "ruleReqDocument", "true");
            	    	    }
            	    	    // InternalReqSpec.g:679:19: ( ( (lv_content_7_1= ruleDocGoal | lv_content_7_2= ruleDocRequirement | lv_content_7_3= ruleDocumentSection ) ) )
            	    	    // InternalReqSpec.g:679:20: ( (lv_content_7_1= ruleDocGoal | lv_content_7_2= ruleDocRequirement | lv_content_7_3= ruleDocumentSection ) )
            	    	    {
            	    	    // InternalReqSpec.g:679:20: ( (lv_content_7_1= ruleDocGoal | lv_content_7_2= ruleDocRequirement | lv_content_7_3= ruleDocumentSection ) )
            	    	    // InternalReqSpec.g:680:10: (lv_content_7_1= ruleDocGoal | lv_content_7_2= ruleDocRequirement | lv_content_7_3= ruleDocumentSection )
            	    	    {
            	    	    // InternalReqSpec.g:680:10: (lv_content_7_1= ruleDocGoal | lv_content_7_2= ruleDocRequirement | lv_content_7_3= ruleDocumentSection )
            	    	    int alt15=3;
            	    	    switch ( input.LA(1) ) {
            	    	    case 32:
            	    	        {
            	    	        alt15=1;
            	    	        }
            	    	        break;
            	    	    case 39:
            	    	        {
            	    	        alt15=2;
            	    	        }
            	    	        break;
            	    	    case 28:
            	    	        {
            	    	        alt15=3;
            	    	        }
            	    	        break;
            	    	    default:
            	    	        if (state.backtracking>0) {state.failed=true; return current;}
            	    	        NoViableAltException nvae =
            	    	            new NoViableAltException("", 15, 0, input);

            	    	        throw nvae;
            	    	    }

            	    	    switch (alt15) {
            	    	        case 1 :
            	    	            // InternalReqSpec.g:681:11: lv_content_7_1= ruleDocGoal
            	    	            {
            	    	            if ( state.backtracking==0 ) {

            	    	              											newCompositeNode(grammarAccess.getReqDocumentAccess().getContentDocGoalParserRuleCall_4_1_0_0());
            	    	              										
            	    	            }
            	    	            pushFollow(FollowSets000.FOLLOW_21);
            	    	            lv_content_7_1=ruleDocGoal();

            	    	            state._fsp--;
            	    	            if (state.failed) return current;
            	    	            if ( state.backtracking==0 ) {

            	    	              											if (current==null) {
            	    	              												current = createModelElementForParent(grammarAccess.getReqDocumentRule());
            	    	              											}
            	    	              											add(
            	    	              												current,
            	    	              												"content",
            	    	              												lv_content_7_1,
            	    	              												"org.osate.reqspec.ReqSpec.DocGoal");
            	    	              											afterParserOrEnumRuleCall();
            	    	              										
            	    	            }

            	    	            }
            	    	            break;
            	    	        case 2 :
            	    	            // InternalReqSpec.g:697:11: lv_content_7_2= ruleDocRequirement
            	    	            {
            	    	            if ( state.backtracking==0 ) {

            	    	              											newCompositeNode(grammarAccess.getReqDocumentAccess().getContentDocRequirementParserRuleCall_4_1_0_1());
            	    	              										
            	    	            }
            	    	            pushFollow(FollowSets000.FOLLOW_21);
            	    	            lv_content_7_2=ruleDocRequirement();

            	    	            state._fsp--;
            	    	            if (state.failed) return current;
            	    	            if ( state.backtracking==0 ) {

            	    	              											if (current==null) {
            	    	              												current = createModelElementForParent(grammarAccess.getReqDocumentRule());
            	    	              											}
            	    	              											add(
            	    	              												current,
            	    	              												"content",
            	    	              												lv_content_7_2,
            	    	              												"org.osate.reqspec.ReqSpec.DocRequirement");
            	    	              											afterParserOrEnumRuleCall();
            	    	              										
            	    	            }

            	    	            }
            	    	            break;
            	    	        case 3 :
            	    	            // InternalReqSpec.g:713:11: lv_content_7_3= ruleDocumentSection
            	    	            {
            	    	            if ( state.backtracking==0 ) {

            	    	              											newCompositeNode(grammarAccess.getReqDocumentAccess().getContentDocumentSectionParserRuleCall_4_1_0_2());
            	    	              										
            	    	            }
            	    	            pushFollow(FollowSets000.FOLLOW_21);
            	    	            lv_content_7_3=ruleDocumentSection();

            	    	            state._fsp--;
            	    	            if (state.failed) return current;
            	    	            if ( state.backtracking==0 ) {

            	    	              											if (current==null) {
            	    	              												current = createModelElementForParent(grammarAccess.getReqDocumentRule());
            	    	              											}
            	    	              											add(
            	    	              												current,
            	    	              												"content",
            	    	              												lv_content_7_3,
            	    	              												"org.osate.reqspec.ReqSpec.DocumentSection");
            	    	              											afterParserOrEnumRuleCall();
            	    	              										
            	    	            }

            	    	            }
            	    	            break;

            	    	    }


            	    	    }


            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt16 >= 1 ) break loop16;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(16, input);
            	                throw eee;
            	        }
            	        cnt16++;
            	    } while (true);

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReqDocumentAccess().getUnorderedGroup_4());

            	    }


            	    }


            	    }
            	    break;
            	case 3 :
            	    // InternalReqSpec.g:736:4: ({...}? => ( ({...}? => (otherlv_8= 'see' otherlv_9= 'document' ( (lv_docReference_10_0= ruleExternalDocument ) )+ ) ) ) )
            	    {
            	    // InternalReqSpec.g:736:4: ({...}? => ( ({...}? => (otherlv_8= 'see' otherlv_9= 'document' ( (lv_docReference_10_0= ruleExternalDocument ) )+ ) ) ) )
            	    // InternalReqSpec.g:737:5: {...}? => ( ({...}? => (otherlv_8= 'see' otherlv_9= 'document' ( (lv_docReference_10_0= ruleExternalDocument ) )+ ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReqDocumentAccess().getUnorderedGroup_4(), 2) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleReqDocument", "getUnorderedGroupHelper().canSelect(grammarAccess.getReqDocumentAccess().getUnorderedGroup_4(), 2)");
            	    }
            	    // InternalReqSpec.g:737:108: ( ({...}? => (otherlv_8= 'see' otherlv_9= 'document' ( (lv_docReference_10_0= ruleExternalDocument ) )+ ) ) )
            	    // InternalReqSpec.g:738:6: ({...}? => (otherlv_8= 'see' otherlv_9= 'document' ( (lv_docReference_10_0= ruleExternalDocument ) )+ ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getReqDocumentAccess().getUnorderedGroup_4(), 2);
            	    // InternalReqSpec.g:741:9: ({...}? => (otherlv_8= 'see' otherlv_9= 'document' ( (lv_docReference_10_0= ruleExternalDocument ) )+ ) )
            	    // InternalReqSpec.g:741:10: {...}? => (otherlv_8= 'see' otherlv_9= 'document' ( (lv_docReference_10_0= ruleExternalDocument ) )+ )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleReqDocument", "true");
            	    }
            	    // InternalReqSpec.g:741:19: (otherlv_8= 'see' otherlv_9= 'document' ( (lv_docReference_10_0= ruleExternalDocument ) )+ )
            	    // InternalReqSpec.g:741:20: otherlv_8= 'see' otherlv_9= 'document' ( (lv_docReference_10_0= ruleExternalDocument ) )+
            	    {
            	    otherlv_8=(Token)match(input,25,FollowSets000.FOLLOW_17); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_8, grammarAccess.getReqDocumentAccess().getSeeKeyword_4_2_0());
            	      								
            	    }
            	    otherlv_9=(Token)match(input,26,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_9, grammarAccess.getReqDocumentAccess().getDocumentKeyword_4_2_1());
            	      								
            	    }
            	    // InternalReqSpec.g:749:9: ( (lv_docReference_10_0= ruleExternalDocument ) )+
            	    int cnt17=0;
            	    loop17:
            	    do {
            	        int alt17=2;
            	        int LA17_0 = input.LA(1);

            	        if ( (LA17_0==RULE_ID) ) {
            	            alt17=1;
            	        }


            	        switch (alt17) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:750:10: (lv_docReference_10_0= ruleExternalDocument )
            	    	    {
            	    	    // InternalReqSpec.g:750:10: (lv_docReference_10_0= ruleExternalDocument )
            	    	    // InternalReqSpec.g:751:11: lv_docReference_10_0= ruleExternalDocument
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      											newCompositeNode(grammarAccess.getReqDocumentAccess().getDocReferenceExternalDocumentParserRuleCall_4_2_2_0());
            	    	      										
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_22);
            	    	    lv_docReference_10_0=ruleExternalDocument();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      											if (current==null) {
            	    	      												current = createModelElementForParent(grammarAccess.getReqDocumentRule());
            	    	      											}
            	    	      											add(
            	    	      												current,
            	    	      												"docReference",
            	    	      												lv_docReference_10_0,
            	    	      												"org.osate.reqspec.ReqSpec.ExternalDocument");
            	    	      											afterParserOrEnumRuleCall();
            	    	      										
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt17 >= 1 ) break loop17;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(17, input);
            	                throw eee;
            	        }
            	        cnt17++;
            	    } while (true);


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReqDocumentAccess().getUnorderedGroup_4());

            	    }


            	    }


            	    }
            	    break;
            	case 4 :
            	    // InternalReqSpec.g:774:4: ({...}? => ( ({...}? => (otherlv_11= 'issues' ( (lv_issues_12_0= RULE_STRING ) )+ ) ) ) )
            	    {
            	    // InternalReqSpec.g:774:4: ({...}? => ( ({...}? => (otherlv_11= 'issues' ( (lv_issues_12_0= RULE_STRING ) )+ ) ) ) )
            	    // InternalReqSpec.g:775:5: {...}? => ( ({...}? => (otherlv_11= 'issues' ( (lv_issues_12_0= RULE_STRING ) )+ ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getReqDocumentAccess().getUnorderedGroup_4(), 3) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleReqDocument", "getUnorderedGroupHelper().canSelect(grammarAccess.getReqDocumentAccess().getUnorderedGroup_4(), 3)");
            	    }
            	    // InternalReqSpec.g:775:108: ( ({...}? => (otherlv_11= 'issues' ( (lv_issues_12_0= RULE_STRING ) )+ ) ) )
            	    // InternalReqSpec.g:776:6: ({...}? => (otherlv_11= 'issues' ( (lv_issues_12_0= RULE_STRING ) )+ ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getReqDocumentAccess().getUnorderedGroup_4(), 3);
            	    // InternalReqSpec.g:779:9: ({...}? => (otherlv_11= 'issues' ( (lv_issues_12_0= RULE_STRING ) )+ ) )
            	    // InternalReqSpec.g:779:10: {...}? => (otherlv_11= 'issues' ( (lv_issues_12_0= RULE_STRING ) )+ )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleReqDocument", "true");
            	    }
            	    // InternalReqSpec.g:779:19: (otherlv_11= 'issues' ( (lv_issues_12_0= RULE_STRING ) )+ )
            	    // InternalReqSpec.g:779:20: otherlv_11= 'issues' ( (lv_issues_12_0= RULE_STRING ) )+
            	    {
            	    otherlv_11=(Token)match(input,27,FollowSets000.FOLLOW_9); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_11, grammarAccess.getReqDocumentAccess().getIssuesKeyword_4_3_0());
            	      								
            	    }
            	    // InternalReqSpec.g:783:9: ( (lv_issues_12_0= RULE_STRING ) )+
            	    int cnt18=0;
            	    loop18:
            	    do {
            	        int alt18=2;
            	        int LA18_0 = input.LA(1);

            	        if ( (LA18_0==RULE_STRING) ) {
            	            alt18=1;
            	        }


            	        switch (alt18) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:784:10: (lv_issues_12_0= RULE_STRING )
            	    	    {
            	    	    // InternalReqSpec.g:784:10: (lv_issues_12_0= RULE_STRING )
            	    	    // InternalReqSpec.g:785:11: lv_issues_12_0= RULE_STRING
            	    	    {
            	    	    lv_issues_12_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_23); if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      											newLeafNode(lv_issues_12_0, grammarAccess.getReqDocumentAccess().getIssuesSTRINGTerminalRuleCall_4_3_1_0());
            	    	      										
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      											if (current==null) {
            	    	      												current = createModelElement(grammarAccess.getReqDocumentRule());
            	    	      											}
            	    	      											addWithLastConsumed(
            	    	      												current,
            	    	      												"issues",
            	    	      												lv_issues_12_0,
            	    	      												"org.eclipse.xtext.common.Terminals.STRING");
            	    	      										
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt18 >= 1 ) break loop18;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(18, input);
            	                throw eee;
            	        }
            	        cnt18++;
            	    } while (true);


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getReqDocumentAccess().getUnorderedGroup_4());

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop19;
                }
            } while (true);


            }


            }

            getUnorderedGroupHelper().leave(grammarAccess.getReqDocumentAccess().getUnorderedGroup_4());

            }

            otherlv_13=(Token)match(input,19,FollowSets000.FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_13, grammarAccess.getReqDocumentAccess().getRightSquareBracketKeyword_5());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleReqDocument"


    // $ANTLR start "entryRuleDocumentSection"
    // InternalReqSpec.g:822:1: entryRuleDocumentSection returns [EObject current=null] : iv_ruleDocumentSection= ruleDocumentSection EOF ;
    public final EObject entryRuleDocumentSection() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDocumentSection = null;


        try {
            // InternalReqSpec.g:822:56: (iv_ruleDocumentSection= ruleDocumentSection EOF )
            // InternalReqSpec.g:823:2: iv_ruleDocumentSection= ruleDocumentSection EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getDocumentSectionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleDocumentSection=ruleDocumentSection();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleDocumentSection; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDocumentSection"


    // $ANTLR start "ruleDocumentSection"
    // InternalReqSpec.g:829:1: ruleDocumentSection returns [EObject current=null] : (otherlv_0= 'section' ( ( ( (lv_label_1_0= RULE_ID ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? ) | ( (lv_title_4_0= RULE_STRING ) ) ) otherlv_5= '[' ( ( ( ( ({...}? => ( ({...}? => ( (lv_description_7_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_content_8_1= ruleDocGoal | lv_content_8_2= ruleDocRequirement | lv_content_8_3= ruleDocumentSection ) ) ) )+ ) ) )* ) ) ) otherlv_9= ']' ) ;
    public final EObject ruleDocumentSection() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_label_1_0=null;
        Token otherlv_2=null;
        Token lv_title_3_0=null;
        Token lv_title_4_0=null;
        Token otherlv_5=null;
        Token otherlv_9=null;
        EObject lv_description_7_0 = null;

        EObject lv_content_8_1 = null;

        EObject lv_content_8_2 = null;

        EObject lv_content_8_3 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:835:2: ( (otherlv_0= 'section' ( ( ( (lv_label_1_0= RULE_ID ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? ) | ( (lv_title_4_0= RULE_STRING ) ) ) otherlv_5= '[' ( ( ( ( ({...}? => ( ({...}? => ( (lv_description_7_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_content_8_1= ruleDocGoal | lv_content_8_2= ruleDocRequirement | lv_content_8_3= ruleDocumentSection ) ) ) )+ ) ) )* ) ) ) otherlv_9= ']' ) )
            // InternalReqSpec.g:836:2: (otherlv_0= 'section' ( ( ( (lv_label_1_0= RULE_ID ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? ) | ( (lv_title_4_0= RULE_STRING ) ) ) otherlv_5= '[' ( ( ( ( ({...}? => ( ({...}? => ( (lv_description_7_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_content_8_1= ruleDocGoal | lv_content_8_2= ruleDocRequirement | lv_content_8_3= ruleDocumentSection ) ) ) )+ ) ) )* ) ) ) otherlv_9= ']' )
            {
            // InternalReqSpec.g:836:2: (otherlv_0= 'section' ( ( ( (lv_label_1_0= RULE_ID ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? ) | ( (lv_title_4_0= RULE_STRING ) ) ) otherlv_5= '[' ( ( ( ( ({...}? => ( ({...}? => ( (lv_description_7_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_content_8_1= ruleDocGoal | lv_content_8_2= ruleDocRequirement | lv_content_8_3= ruleDocumentSection ) ) ) )+ ) ) )* ) ) ) otherlv_9= ']' )
            // InternalReqSpec.g:837:3: otherlv_0= 'section' ( ( ( (lv_label_1_0= RULE_ID ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? ) | ( (lv_title_4_0= RULE_STRING ) ) ) otherlv_5= '[' ( ( ( ( ({...}? => ( ({...}? => ( (lv_description_7_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_content_8_1= ruleDocGoal | lv_content_8_2= ruleDocRequirement | lv_content_8_3= ruleDocumentSection ) ) ) )+ ) ) )* ) ) ) otherlv_9= ']'
            {
            otherlv_0=(Token)match(input,28,FollowSets000.FOLLOW_24); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getDocumentSectionAccess().getSectionKeyword_0());
              		
            }
            // InternalReqSpec.g:841:3: ( ( ( (lv_label_1_0= RULE_ID ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? ) | ( (lv_title_4_0= RULE_STRING ) ) )
            int alt21=2;
            int LA21_0 = input.LA(1);

            if ( (LA21_0==RULE_ID) ) {
                alt21=1;
            }
            else if ( (LA21_0==RULE_STRING) ) {
                alt21=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 21, 0, input);

                throw nvae;
            }
            switch (alt21) {
                case 1 :
                    // InternalReqSpec.g:842:4: ( ( (lv_label_1_0= RULE_ID ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? )
                    {
                    // InternalReqSpec.g:842:4: ( ( (lv_label_1_0= RULE_ID ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? )
                    // InternalReqSpec.g:843:5: ( (lv_label_1_0= RULE_ID ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )?
                    {
                    // InternalReqSpec.g:843:5: ( (lv_label_1_0= RULE_ID ) )
                    // InternalReqSpec.g:844:6: (lv_label_1_0= RULE_ID )
                    {
                    // InternalReqSpec.g:844:6: (lv_label_1_0= RULE_ID )
                    // InternalReqSpec.g:845:7: lv_label_1_0= RULE_ID
                    {
                    lv_label_1_0=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_20); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							newLeafNode(lv_label_1_0, grammarAccess.getDocumentSectionAccess().getLabelIDTerminalRuleCall_1_0_0_0());
                      						
                    }
                    if ( state.backtracking==0 ) {

                      							if (current==null) {
                      								current = createModelElement(grammarAccess.getDocumentSectionRule());
                      							}
                      							setWithLastConsumed(
                      								current,
                      								"label",
                      								lv_label_1_0,
                      								"org.eclipse.xtext.common.Terminals.ID");
                      						
                    }

                    }


                    }

                    // InternalReqSpec.g:861:5: (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )?
                    int alt20=2;
                    int LA20_0 = input.LA(1);

                    if ( (LA20_0==22) ) {
                        alt20=1;
                    }
                    switch (alt20) {
                        case 1 :
                            // InternalReqSpec.g:862:6: otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) )
                            {
                            otherlv_2=(Token)match(input,22,FollowSets000.FOLLOW_9); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              						newLeafNode(otherlv_2, grammarAccess.getDocumentSectionAccess().getColonKeyword_1_0_1_0());
                              					
                            }
                            // InternalReqSpec.g:866:6: ( (lv_title_3_0= RULE_STRING ) )
                            // InternalReqSpec.g:867:7: (lv_title_3_0= RULE_STRING )
                            {
                            // InternalReqSpec.g:867:7: (lv_title_3_0= RULE_STRING )
                            // InternalReqSpec.g:868:8: lv_title_3_0= RULE_STRING
                            {
                            lv_title_3_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_5); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              								newLeafNode(lv_title_3_0, grammarAccess.getDocumentSectionAccess().getTitleSTRINGTerminalRuleCall_1_0_1_1_0());
                              							
                            }
                            if ( state.backtracking==0 ) {

                              								if (current==null) {
                              									current = createModelElement(grammarAccess.getDocumentSectionRule());
                              								}
                              								setWithLastConsumed(
                              									current,
                              									"title",
                              									lv_title_3_0,
                              									"org.eclipse.xtext.common.Terminals.STRING");
                              							
                            }

                            }


                            }


                            }
                            break;

                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalReqSpec.g:887:4: ( (lv_title_4_0= RULE_STRING ) )
                    {
                    // InternalReqSpec.g:887:4: ( (lv_title_4_0= RULE_STRING ) )
                    // InternalReqSpec.g:888:5: (lv_title_4_0= RULE_STRING )
                    {
                    // InternalReqSpec.g:888:5: (lv_title_4_0= RULE_STRING )
                    // InternalReqSpec.g:889:6: lv_title_4_0= RULE_STRING
                    {
                    lv_title_4_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_5); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_title_4_0, grammarAccess.getDocumentSectionAccess().getTitleSTRINGTerminalRuleCall_1_1_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getDocumentSectionRule());
                      						}
                      						setWithLastConsumed(
                      							current,
                      							"title",
                      							lv_title_4_0,
                      							"org.eclipse.xtext.common.Terminals.STRING");
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            otherlv_5=(Token)match(input,18,FollowSets000.FOLLOW_25); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_5, grammarAccess.getDocumentSectionAccess().getLeftSquareBracketKeyword_2());
              		
            }
            // InternalReqSpec.g:910:3: ( ( ( ( ({...}? => ( ({...}? => ( (lv_description_7_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_content_8_1= ruleDocGoal | lv_content_8_2= ruleDocRequirement | lv_content_8_3= ruleDocumentSection ) ) ) )+ ) ) )* ) ) )
            // InternalReqSpec.g:911:4: ( ( ( ({...}? => ( ({...}? => ( (lv_description_7_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_content_8_1= ruleDocGoal | lv_content_8_2= ruleDocRequirement | lv_content_8_3= ruleDocumentSection ) ) ) )+ ) ) )* ) )
            {
            // InternalReqSpec.g:911:4: ( ( ( ({...}? => ( ({...}? => ( (lv_description_7_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_content_8_1= ruleDocGoal | lv_content_8_2= ruleDocRequirement | lv_content_8_3= ruleDocumentSection ) ) ) )+ ) ) )* ) )
            // InternalReqSpec.g:912:5: ( ( ({...}? => ( ({...}? => ( (lv_description_7_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_content_8_1= ruleDocGoal | lv_content_8_2= ruleDocRequirement | lv_content_8_3= ruleDocumentSection ) ) ) )+ ) ) )* )
            {
            getUnorderedGroupHelper().enter(grammarAccess.getDocumentSectionAccess().getUnorderedGroup_3());
            // InternalReqSpec.g:915:5: ( ( ({...}? => ( ({...}? => ( (lv_description_7_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_content_8_1= ruleDocGoal | lv_content_8_2= ruleDocRequirement | lv_content_8_3= ruleDocumentSection ) ) ) )+ ) ) )* )
            // InternalReqSpec.g:916:6: ( ({...}? => ( ({...}? => ( (lv_description_7_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_content_8_1= ruleDocGoal | lv_content_8_2= ruleDocRequirement | lv_content_8_3= ruleDocumentSection ) ) ) )+ ) ) )*
            {
            // InternalReqSpec.g:916:6: ( ({...}? => ( ({...}? => ( (lv_description_7_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_content_8_1= ruleDocGoal | lv_content_8_2= ruleDocRequirement | lv_content_8_3= ruleDocumentSection ) ) ) )+ ) ) )*
            loop24:
            do {
                int alt24=3;
                int LA24_0 = input.LA(1);

                if ( LA24_0 == 66 && getUnorderedGroupHelper().canSelect(grammarAccess.getDocumentSectionAccess().getUnorderedGroup_3(), 0) ) {
                    alt24=1;
                }
                else if ( ( LA24_0 == 28 || LA24_0 == 32 || LA24_0 == 39 ) && getUnorderedGroupHelper().canSelect(grammarAccess.getDocumentSectionAccess().getUnorderedGroup_3(), 1) ) {
                    alt24=2;
                }


                switch (alt24) {
            	case 1 :
            	    // InternalReqSpec.g:917:4: ({...}? => ( ({...}? => ( (lv_description_7_0= ruleDescription ) ) ) ) )
            	    {
            	    // InternalReqSpec.g:917:4: ({...}? => ( ({...}? => ( (lv_description_7_0= ruleDescription ) ) ) ) )
            	    // InternalReqSpec.g:918:5: {...}? => ( ({...}? => ( (lv_description_7_0= ruleDescription ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDocumentSectionAccess().getUnorderedGroup_3(), 0) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocumentSection", "getUnorderedGroupHelper().canSelect(grammarAccess.getDocumentSectionAccess().getUnorderedGroup_3(), 0)");
            	    }
            	    // InternalReqSpec.g:918:112: ( ({...}? => ( (lv_description_7_0= ruleDescription ) ) ) )
            	    // InternalReqSpec.g:919:6: ({...}? => ( (lv_description_7_0= ruleDescription ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getDocumentSectionAccess().getUnorderedGroup_3(), 0);
            	    // InternalReqSpec.g:922:9: ({...}? => ( (lv_description_7_0= ruleDescription ) ) )
            	    // InternalReqSpec.g:922:10: {...}? => ( (lv_description_7_0= ruleDescription ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocumentSection", "true");
            	    }
            	    // InternalReqSpec.g:922:19: ( (lv_description_7_0= ruleDescription ) )
            	    // InternalReqSpec.g:922:20: (lv_description_7_0= ruleDescription )
            	    {
            	    // InternalReqSpec.g:922:20: (lv_description_7_0= ruleDescription )
            	    // InternalReqSpec.g:923:10: lv_description_7_0= ruleDescription
            	    {
            	    if ( state.backtracking==0 ) {

            	      										newCompositeNode(grammarAccess.getDocumentSectionAccess().getDescriptionDescriptionParserRuleCall_3_0_0());
            	      									
            	    }
            	    pushFollow(FollowSets000.FOLLOW_25);
            	    lv_description_7_0=ruleDescription();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      										if (current==null) {
            	      											current = createModelElementForParent(grammarAccess.getDocumentSectionRule());
            	      										}
            	      										set(
            	      											current,
            	      											"description",
            	      											lv_description_7_0,
            	      											"org.osate.alisa.common.Common.Description");
            	      										afterParserOrEnumRuleCall();
            	      									
            	    }

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDocumentSectionAccess().getUnorderedGroup_3());

            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // InternalReqSpec.g:945:4: ({...}? => ( ({...}? => ( ( (lv_content_8_1= ruleDocGoal | lv_content_8_2= ruleDocRequirement | lv_content_8_3= ruleDocumentSection ) ) ) )+ ) )
            	    {
            	    // InternalReqSpec.g:945:4: ({...}? => ( ({...}? => ( ( (lv_content_8_1= ruleDocGoal | lv_content_8_2= ruleDocRequirement | lv_content_8_3= ruleDocumentSection ) ) ) )+ ) )
            	    // InternalReqSpec.g:946:5: {...}? => ( ({...}? => ( ( (lv_content_8_1= ruleDocGoal | lv_content_8_2= ruleDocRequirement | lv_content_8_3= ruleDocumentSection ) ) ) )+ )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDocumentSectionAccess().getUnorderedGroup_3(), 1) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocumentSection", "getUnorderedGroupHelper().canSelect(grammarAccess.getDocumentSectionAccess().getUnorderedGroup_3(), 1)");
            	    }
            	    // InternalReqSpec.g:946:112: ( ({...}? => ( ( (lv_content_8_1= ruleDocGoal | lv_content_8_2= ruleDocRequirement | lv_content_8_3= ruleDocumentSection ) ) ) )+ )
            	    // InternalReqSpec.g:947:6: ({...}? => ( ( (lv_content_8_1= ruleDocGoal | lv_content_8_2= ruleDocRequirement | lv_content_8_3= ruleDocumentSection ) ) ) )+
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getDocumentSectionAccess().getUnorderedGroup_3(), 1);
            	    // InternalReqSpec.g:950:9: ({...}? => ( ( (lv_content_8_1= ruleDocGoal | lv_content_8_2= ruleDocRequirement | lv_content_8_3= ruleDocumentSection ) ) ) )+
            	    int cnt23=0;
            	    loop23:
            	    do {
            	        int alt23=2;
            	        switch ( input.LA(1) ) {
            	        case 32:
            	            {
            	            int LA23_2 = input.LA(2);

            	            if ( ((true)) ) {
            	                alt23=1;
            	            }


            	            }
            	            break;
            	        case 39:
            	            {
            	            int LA23_3 = input.LA(2);

            	            if ( ((true)) ) {
            	                alt23=1;
            	            }


            	            }
            	            break;
            	        case 28:
            	            {
            	            int LA23_4 = input.LA(2);

            	            if ( ((true)) ) {
            	                alt23=1;
            	            }


            	            }
            	            break;

            	        }

            	        switch (alt23) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:950:10: {...}? => ( ( (lv_content_8_1= ruleDocGoal | lv_content_8_2= ruleDocRequirement | lv_content_8_3= ruleDocumentSection ) ) )
            	    	    {
            	    	    if ( !((true)) ) {
            	    	        if (state.backtracking>0) {state.failed=true; return current;}
            	    	        throw new FailedPredicateException(input, "ruleDocumentSection", "true");
            	    	    }
            	    	    // InternalReqSpec.g:950:19: ( ( (lv_content_8_1= ruleDocGoal | lv_content_8_2= ruleDocRequirement | lv_content_8_3= ruleDocumentSection ) ) )
            	    	    // InternalReqSpec.g:950:20: ( (lv_content_8_1= ruleDocGoal | lv_content_8_2= ruleDocRequirement | lv_content_8_3= ruleDocumentSection ) )
            	    	    {
            	    	    // InternalReqSpec.g:950:20: ( (lv_content_8_1= ruleDocGoal | lv_content_8_2= ruleDocRequirement | lv_content_8_3= ruleDocumentSection ) )
            	    	    // InternalReqSpec.g:951:10: (lv_content_8_1= ruleDocGoal | lv_content_8_2= ruleDocRequirement | lv_content_8_3= ruleDocumentSection )
            	    	    {
            	    	    // InternalReqSpec.g:951:10: (lv_content_8_1= ruleDocGoal | lv_content_8_2= ruleDocRequirement | lv_content_8_3= ruleDocumentSection )
            	    	    int alt22=3;
            	    	    switch ( input.LA(1) ) {
            	    	    case 32:
            	    	        {
            	    	        alt22=1;
            	    	        }
            	    	        break;
            	    	    case 39:
            	    	        {
            	    	        alt22=2;
            	    	        }
            	    	        break;
            	    	    case 28:
            	    	        {
            	    	        alt22=3;
            	    	        }
            	    	        break;
            	    	    default:
            	    	        if (state.backtracking>0) {state.failed=true; return current;}
            	    	        NoViableAltException nvae =
            	    	            new NoViableAltException("", 22, 0, input);

            	    	        throw nvae;
            	    	    }

            	    	    switch (alt22) {
            	    	        case 1 :
            	    	            // InternalReqSpec.g:952:11: lv_content_8_1= ruleDocGoal
            	    	            {
            	    	            if ( state.backtracking==0 ) {

            	    	              											newCompositeNode(grammarAccess.getDocumentSectionAccess().getContentDocGoalParserRuleCall_3_1_0_0());
            	    	              										
            	    	            }
            	    	            pushFollow(FollowSets000.FOLLOW_25);
            	    	            lv_content_8_1=ruleDocGoal();

            	    	            state._fsp--;
            	    	            if (state.failed) return current;
            	    	            if ( state.backtracking==0 ) {

            	    	              											if (current==null) {
            	    	              												current = createModelElementForParent(grammarAccess.getDocumentSectionRule());
            	    	              											}
            	    	              											add(
            	    	              												current,
            	    	              												"content",
            	    	              												lv_content_8_1,
            	    	              												"org.osate.reqspec.ReqSpec.DocGoal");
            	    	              											afterParserOrEnumRuleCall();
            	    	              										
            	    	            }

            	    	            }
            	    	            break;
            	    	        case 2 :
            	    	            // InternalReqSpec.g:968:11: lv_content_8_2= ruleDocRequirement
            	    	            {
            	    	            if ( state.backtracking==0 ) {

            	    	              											newCompositeNode(grammarAccess.getDocumentSectionAccess().getContentDocRequirementParserRuleCall_3_1_0_1());
            	    	              										
            	    	            }
            	    	            pushFollow(FollowSets000.FOLLOW_25);
            	    	            lv_content_8_2=ruleDocRequirement();

            	    	            state._fsp--;
            	    	            if (state.failed) return current;
            	    	            if ( state.backtracking==0 ) {

            	    	              											if (current==null) {
            	    	              												current = createModelElementForParent(grammarAccess.getDocumentSectionRule());
            	    	              											}
            	    	              											add(
            	    	              												current,
            	    	              												"content",
            	    	              												lv_content_8_2,
            	    	              												"org.osate.reqspec.ReqSpec.DocRequirement");
            	    	              											afterParserOrEnumRuleCall();
            	    	              										
            	    	            }

            	    	            }
            	    	            break;
            	    	        case 3 :
            	    	            // InternalReqSpec.g:984:11: lv_content_8_3= ruleDocumentSection
            	    	            {
            	    	            if ( state.backtracking==0 ) {

            	    	              											newCompositeNode(grammarAccess.getDocumentSectionAccess().getContentDocumentSectionParserRuleCall_3_1_0_2());
            	    	              										
            	    	            }
            	    	            pushFollow(FollowSets000.FOLLOW_25);
            	    	            lv_content_8_3=ruleDocumentSection();

            	    	            state._fsp--;
            	    	            if (state.failed) return current;
            	    	            if ( state.backtracking==0 ) {

            	    	              											if (current==null) {
            	    	              												current = createModelElementForParent(grammarAccess.getDocumentSectionRule());
            	    	              											}
            	    	              											add(
            	    	              												current,
            	    	              												"content",
            	    	              												lv_content_8_3,
            	    	              												"org.osate.reqspec.ReqSpec.DocumentSection");
            	    	              											afterParserOrEnumRuleCall();
            	    	              										
            	    	            }

            	    	            }
            	    	            break;

            	    	    }


            	    	    }


            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt23 >= 1 ) break loop23;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(23, input);
            	                throw eee;
            	        }
            	        cnt23++;
            	    } while (true);

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDocumentSectionAccess().getUnorderedGroup_3());

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop24;
                }
            } while (true);


            }


            }

            getUnorderedGroupHelper().leave(grammarAccess.getDocumentSectionAccess().getUnorderedGroup_3());

            }

            otherlv_9=(Token)match(input,19,FollowSets000.FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_9, grammarAccess.getDocumentSectionAccess().getRightSquareBracketKeyword_4());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDocumentSection"


    // $ANTLR start "entryRuleSystemRequirementSet"
    // InternalReqSpec.g:1022:1: entryRuleSystemRequirementSet returns [EObject current=null] : iv_ruleSystemRequirementSet= ruleSystemRequirementSet EOF ;
    public final EObject entryRuleSystemRequirementSet() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSystemRequirementSet = null;


        try {
            // InternalReqSpec.g:1022:61: (iv_ruleSystemRequirementSet= ruleSystemRequirementSet EOF )
            // InternalReqSpec.g:1023:2: iv_ruleSystemRequirementSet= ruleSystemRequirementSet EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getSystemRequirementSetRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleSystemRequirementSet=ruleSystemRequirementSet();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleSystemRequirementSet; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSystemRequirementSet"


    // $ANTLR start "ruleSystemRequirementSet"
    // InternalReqSpec.g:1029:1: ruleSystemRequirementSet returns [EObject current=null] : ( () otherlv_1= 'system' otherlv_2= 'requirements' ( (lv_name_3_0= ruleQualifiedName ) ) (otherlv_4= ':' ( (lv_title_5_0= RULE_STRING ) ) )? otherlv_6= 'for' ( ( ruleAadlClassifierReference ) ) (otherlv_8= 'use' otherlv_9= 'constants' ( ( ruleQualifiedName ) )+ )? otherlv_11= '[' ( ( (lv_description_12_0= ruleDescription ) ) | ( (lv_constants_13_0= ruleValDeclaration ) ) | ( (lv_computes_14_0= ruleComputeDeclaration ) ) | ( (lv_requirements_15_0= ruleSystemRequirement ) ) | ( (lv_include_16_0= ruleIncludeGlobalRequirement ) ) | (otherlv_17= 'see' otherlv_18= 'document' ( (lv_docReference_19_0= ruleExternalDocument ) )+ ) | (otherlv_20= 'see' otherlv_21= 'goals' ( ( ruleQualifiedName ) )+ ) | (otherlv_23= 'issues' ( (lv_issues_24_0= RULE_STRING ) )+ ) )* otherlv_25= ']' ) ;
    public final EObject ruleSystemRequirementSet() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token lv_title_5_0=null;
        Token otherlv_6=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        Token otherlv_11=null;
        Token otherlv_17=null;
        Token otherlv_18=null;
        Token otherlv_20=null;
        Token otherlv_21=null;
        Token otherlv_23=null;
        Token lv_issues_24_0=null;
        Token otherlv_25=null;
        AntlrDatatypeRuleToken lv_name_3_0 = null;

        EObject lv_description_12_0 = null;

        EObject lv_constants_13_0 = null;

        EObject lv_computes_14_0 = null;

        EObject lv_requirements_15_0 = null;

        EObject lv_include_16_0 = null;

        EObject lv_docReference_19_0 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:1035:2: ( ( () otherlv_1= 'system' otherlv_2= 'requirements' ( (lv_name_3_0= ruleQualifiedName ) ) (otherlv_4= ':' ( (lv_title_5_0= RULE_STRING ) ) )? otherlv_6= 'for' ( ( ruleAadlClassifierReference ) ) (otherlv_8= 'use' otherlv_9= 'constants' ( ( ruleQualifiedName ) )+ )? otherlv_11= '[' ( ( (lv_description_12_0= ruleDescription ) ) | ( (lv_constants_13_0= ruleValDeclaration ) ) | ( (lv_computes_14_0= ruleComputeDeclaration ) ) | ( (lv_requirements_15_0= ruleSystemRequirement ) ) | ( (lv_include_16_0= ruleIncludeGlobalRequirement ) ) | (otherlv_17= 'see' otherlv_18= 'document' ( (lv_docReference_19_0= ruleExternalDocument ) )+ ) | (otherlv_20= 'see' otherlv_21= 'goals' ( ( ruleQualifiedName ) )+ ) | (otherlv_23= 'issues' ( (lv_issues_24_0= RULE_STRING ) )+ ) )* otherlv_25= ']' ) )
            // InternalReqSpec.g:1036:2: ( () otherlv_1= 'system' otherlv_2= 'requirements' ( (lv_name_3_0= ruleQualifiedName ) ) (otherlv_4= ':' ( (lv_title_5_0= RULE_STRING ) ) )? otherlv_6= 'for' ( ( ruleAadlClassifierReference ) ) (otherlv_8= 'use' otherlv_9= 'constants' ( ( ruleQualifiedName ) )+ )? otherlv_11= '[' ( ( (lv_description_12_0= ruleDescription ) ) | ( (lv_constants_13_0= ruleValDeclaration ) ) | ( (lv_computes_14_0= ruleComputeDeclaration ) ) | ( (lv_requirements_15_0= ruleSystemRequirement ) ) | ( (lv_include_16_0= ruleIncludeGlobalRequirement ) ) | (otherlv_17= 'see' otherlv_18= 'document' ( (lv_docReference_19_0= ruleExternalDocument ) )+ ) | (otherlv_20= 'see' otherlv_21= 'goals' ( ( ruleQualifiedName ) )+ ) | (otherlv_23= 'issues' ( (lv_issues_24_0= RULE_STRING ) )+ ) )* otherlv_25= ']' )
            {
            // InternalReqSpec.g:1036:2: ( () otherlv_1= 'system' otherlv_2= 'requirements' ( (lv_name_3_0= ruleQualifiedName ) ) (otherlv_4= ':' ( (lv_title_5_0= RULE_STRING ) ) )? otherlv_6= 'for' ( ( ruleAadlClassifierReference ) ) (otherlv_8= 'use' otherlv_9= 'constants' ( ( ruleQualifiedName ) )+ )? otherlv_11= '[' ( ( (lv_description_12_0= ruleDescription ) ) | ( (lv_constants_13_0= ruleValDeclaration ) ) | ( (lv_computes_14_0= ruleComputeDeclaration ) ) | ( (lv_requirements_15_0= ruleSystemRequirement ) ) | ( (lv_include_16_0= ruleIncludeGlobalRequirement ) ) | (otherlv_17= 'see' otherlv_18= 'document' ( (lv_docReference_19_0= ruleExternalDocument ) )+ ) | (otherlv_20= 'see' otherlv_21= 'goals' ( ( ruleQualifiedName ) )+ ) | (otherlv_23= 'issues' ( (lv_issues_24_0= RULE_STRING ) )+ ) )* otherlv_25= ']' )
            // InternalReqSpec.g:1037:3: () otherlv_1= 'system' otherlv_2= 'requirements' ( (lv_name_3_0= ruleQualifiedName ) ) (otherlv_4= ':' ( (lv_title_5_0= RULE_STRING ) ) )? otherlv_6= 'for' ( ( ruleAadlClassifierReference ) ) (otherlv_8= 'use' otherlv_9= 'constants' ( ( ruleQualifiedName ) )+ )? otherlv_11= '[' ( ( (lv_description_12_0= ruleDescription ) ) | ( (lv_constants_13_0= ruleValDeclaration ) ) | ( (lv_computes_14_0= ruleComputeDeclaration ) ) | ( (lv_requirements_15_0= ruleSystemRequirement ) ) | ( (lv_include_16_0= ruleIncludeGlobalRequirement ) ) | (otherlv_17= 'see' otherlv_18= 'document' ( (lv_docReference_19_0= ruleExternalDocument ) )+ ) | (otherlv_20= 'see' otherlv_21= 'goals' ( ( ruleQualifiedName ) )+ ) | (otherlv_23= 'issues' ( (lv_issues_24_0= RULE_STRING ) )+ ) )* otherlv_25= ']'
            {
            // InternalReqSpec.g:1037:3: ()
            // InternalReqSpec.g:1038:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getSystemRequirementSetAccess().getSystemRequirementSetAction_0(),
              					current);
              			
            }

            }

            otherlv_1=(Token)match(input,29,FollowSets000.FOLLOW_26); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getSystemRequirementSetAccess().getSystemKeyword_1());
              		
            }
            otherlv_2=(Token)match(input,30,FollowSets000.FOLLOW_4); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_2, grammarAccess.getSystemRequirementSetAccess().getRequirementsKeyword_2());
              		
            }
            // InternalReqSpec.g:1052:3: ( (lv_name_3_0= ruleQualifiedName ) )
            // InternalReqSpec.g:1053:4: (lv_name_3_0= ruleQualifiedName )
            {
            // InternalReqSpec.g:1053:4: (lv_name_3_0= ruleQualifiedName )
            // InternalReqSpec.g:1054:5: lv_name_3_0= ruleQualifiedName
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getSystemRequirementSetAccess().getNameQualifiedNameParserRuleCall_3_0());
              				
            }
            pushFollow(FollowSets000.FOLLOW_8);
            lv_name_3_0=ruleQualifiedName();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getSystemRequirementSetRule());
              					}
              					set(
              						current,
              						"name",
              						lv_name_3_0,
              						"org.osate.alisa.common.Common.QualifiedName");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalReqSpec.g:1071:3: (otherlv_4= ':' ( (lv_title_5_0= RULE_STRING ) ) )?
            int alt25=2;
            int LA25_0 = input.LA(1);

            if ( (LA25_0==22) ) {
                alt25=1;
            }
            switch (alt25) {
                case 1 :
                    // InternalReqSpec.g:1072:4: otherlv_4= ':' ( (lv_title_5_0= RULE_STRING ) )
                    {
                    otherlv_4=(Token)match(input,22,FollowSets000.FOLLOW_9); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_4, grammarAccess.getSystemRequirementSetAccess().getColonKeyword_4_0());
                      			
                    }
                    // InternalReqSpec.g:1076:4: ( (lv_title_5_0= RULE_STRING ) )
                    // InternalReqSpec.g:1077:5: (lv_title_5_0= RULE_STRING )
                    {
                    // InternalReqSpec.g:1077:5: (lv_title_5_0= RULE_STRING )
                    // InternalReqSpec.g:1078:6: lv_title_5_0= RULE_STRING
                    {
                    lv_title_5_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_10); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_title_5_0, grammarAccess.getSystemRequirementSetAccess().getTitleSTRINGTerminalRuleCall_4_1_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getSystemRequirementSetRule());
                      						}
                      						setWithLastConsumed(
                      							current,
                      							"title",
                      							lv_title_5_0,
                      							"org.eclipse.xtext.common.Terminals.STRING");
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            otherlv_6=(Token)match(input,23,FollowSets000.FOLLOW_4); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_6, grammarAccess.getSystemRequirementSetAccess().getForKeyword_5());
              		
            }
            // InternalReqSpec.g:1099:3: ( ( ruleAadlClassifierReference ) )
            // InternalReqSpec.g:1100:4: ( ruleAadlClassifierReference )
            {
            // InternalReqSpec.g:1100:4: ( ruleAadlClassifierReference )
            // InternalReqSpec.g:1101:5: ruleAadlClassifierReference
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getSystemRequirementSetRule());
              					}
              				
            }
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getSystemRequirementSetAccess().getTargetComponentClassifierCrossReference_6_0());
              				
            }
            pushFollow(FollowSets000.FOLLOW_12);
            ruleAadlClassifierReference();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalReqSpec.g:1115:3: (otherlv_8= 'use' otherlv_9= 'constants' ( ( ruleQualifiedName ) )+ )?
            int alt27=2;
            int LA27_0 = input.LA(1);

            if ( (LA27_0==24) ) {
                alt27=1;
            }
            switch (alt27) {
                case 1 :
                    // InternalReqSpec.g:1116:4: otherlv_8= 'use' otherlv_9= 'constants' ( ( ruleQualifiedName ) )+
                    {
                    otherlv_8=(Token)match(input,24,FollowSets000.FOLLOW_14); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_8, grammarAccess.getSystemRequirementSetAccess().getUseKeyword_7_0());
                      			
                    }
                    otherlv_9=(Token)match(input,17,FollowSets000.FOLLOW_4); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_9, grammarAccess.getSystemRequirementSetAccess().getConstantsKeyword_7_1());
                      			
                    }
                    // InternalReqSpec.g:1124:4: ( ( ruleQualifiedName ) )+
                    int cnt26=0;
                    loop26:
                    do {
                        int alt26=2;
                        int LA26_0 = input.LA(1);

                        if ( (LA26_0==RULE_ID) ) {
                            alt26=1;
                        }


                        switch (alt26) {
                    	case 1 :
                    	    // InternalReqSpec.g:1125:5: ( ruleQualifiedName )
                    	    {
                    	    // InternalReqSpec.g:1125:5: ( ruleQualifiedName )
                    	    // InternalReqSpec.g:1126:6: ruleQualifiedName
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      						if (current==null) {
                    	      							current = createModelElement(grammarAccess.getSystemRequirementSetRule());
                    	      						}
                    	      					
                    	    }
                    	    if ( state.backtracking==0 ) {

                    	      						newCompositeNode(grammarAccess.getSystemRequirementSetAccess().getImportConstantsGlobalConstantsCrossReference_7_2_0());
                    	      					
                    	    }
                    	    pushFollow(FollowSets000.FOLLOW_15);
                    	    ruleQualifiedName();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      						afterParserOrEnumRuleCall();
                    	      					
                    	    }

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt26 >= 1 ) break loop26;
                    	    if (state.backtracking>0) {state.failed=true; return current;}
                                EarlyExitException eee =
                                    new EarlyExitException(26, input);
                                throw eee;
                        }
                        cnt26++;
                    } while (true);


                    }
                    break;

            }

            otherlv_11=(Token)match(input,18,FollowSets000.FOLLOW_27); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_11, grammarAccess.getSystemRequirementSetAccess().getLeftSquareBracketKeyword_8());
              		
            }
            // InternalReqSpec.g:1145:3: ( ( (lv_description_12_0= ruleDescription ) ) | ( (lv_constants_13_0= ruleValDeclaration ) ) | ( (lv_computes_14_0= ruleComputeDeclaration ) ) | ( (lv_requirements_15_0= ruleSystemRequirement ) ) | ( (lv_include_16_0= ruleIncludeGlobalRequirement ) ) | (otherlv_17= 'see' otherlv_18= 'document' ( (lv_docReference_19_0= ruleExternalDocument ) )+ ) | (otherlv_20= 'see' otherlv_21= 'goals' ( ( ruleQualifiedName ) )+ ) | (otherlv_23= 'issues' ( (lv_issues_24_0= RULE_STRING ) )+ ) )*
            loop31:
            do {
                int alt31=9;
                alt31 = dfa31.predict(input);
                switch (alt31) {
            	case 1 :
            	    // InternalReqSpec.g:1146:4: ( (lv_description_12_0= ruleDescription ) )
            	    {
            	    // InternalReqSpec.g:1146:4: ( (lv_description_12_0= ruleDescription ) )
            	    // InternalReqSpec.g:1147:5: (lv_description_12_0= ruleDescription )
            	    {
            	    // InternalReqSpec.g:1147:5: (lv_description_12_0= ruleDescription )
            	    // InternalReqSpec.g:1148:6: lv_description_12_0= ruleDescription
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getSystemRequirementSetAccess().getDescriptionDescriptionParserRuleCall_9_0_0());
            	      					
            	    }
            	    pushFollow(FollowSets000.FOLLOW_27);
            	    lv_description_12_0=ruleDescription();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getSystemRequirementSetRule());
            	      						}
            	      						set(
            	      							current,
            	      							"description",
            	      							lv_description_12_0,
            	      							"org.osate.alisa.common.Common.Description");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // InternalReqSpec.g:1166:4: ( (lv_constants_13_0= ruleValDeclaration ) )
            	    {
            	    // InternalReqSpec.g:1166:4: ( (lv_constants_13_0= ruleValDeclaration ) )
            	    // InternalReqSpec.g:1167:5: (lv_constants_13_0= ruleValDeclaration )
            	    {
            	    // InternalReqSpec.g:1167:5: (lv_constants_13_0= ruleValDeclaration )
            	    // InternalReqSpec.g:1168:6: lv_constants_13_0= ruleValDeclaration
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getSystemRequirementSetAccess().getConstantsValDeclarationParserRuleCall_9_1_0());
            	      					
            	    }
            	    pushFollow(FollowSets000.FOLLOW_27);
            	    lv_constants_13_0=ruleValDeclaration();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getSystemRequirementSetRule());
            	      						}
            	      						add(
            	      							current,
            	      							"constants",
            	      							lv_constants_13_0,
            	      							"org.osate.reqspec.ReqSpec.ValDeclaration");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;
            	case 3 :
            	    // InternalReqSpec.g:1186:4: ( (lv_computes_14_0= ruleComputeDeclaration ) )
            	    {
            	    // InternalReqSpec.g:1186:4: ( (lv_computes_14_0= ruleComputeDeclaration ) )
            	    // InternalReqSpec.g:1187:5: (lv_computes_14_0= ruleComputeDeclaration )
            	    {
            	    // InternalReqSpec.g:1187:5: (lv_computes_14_0= ruleComputeDeclaration )
            	    // InternalReqSpec.g:1188:6: lv_computes_14_0= ruleComputeDeclaration
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getSystemRequirementSetAccess().getComputesComputeDeclarationParserRuleCall_9_2_0());
            	      					
            	    }
            	    pushFollow(FollowSets000.FOLLOW_27);
            	    lv_computes_14_0=ruleComputeDeclaration();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getSystemRequirementSetRule());
            	      						}
            	      						add(
            	      							current,
            	      							"computes",
            	      							lv_computes_14_0,
            	      							"org.osate.alisa.common.Common.ComputeDeclaration");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;
            	case 4 :
            	    // InternalReqSpec.g:1206:4: ( (lv_requirements_15_0= ruleSystemRequirement ) )
            	    {
            	    // InternalReqSpec.g:1206:4: ( (lv_requirements_15_0= ruleSystemRequirement ) )
            	    // InternalReqSpec.g:1207:5: (lv_requirements_15_0= ruleSystemRequirement )
            	    {
            	    // InternalReqSpec.g:1207:5: (lv_requirements_15_0= ruleSystemRequirement )
            	    // InternalReqSpec.g:1208:6: lv_requirements_15_0= ruleSystemRequirement
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getSystemRequirementSetAccess().getRequirementsSystemRequirementParserRuleCall_9_3_0());
            	      					
            	    }
            	    pushFollow(FollowSets000.FOLLOW_27);
            	    lv_requirements_15_0=ruleSystemRequirement();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getSystemRequirementSetRule());
            	      						}
            	      						add(
            	      							current,
            	      							"requirements",
            	      							lv_requirements_15_0,
            	      							"org.osate.reqspec.ReqSpec.SystemRequirement");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;
            	case 5 :
            	    // InternalReqSpec.g:1226:4: ( (lv_include_16_0= ruleIncludeGlobalRequirement ) )
            	    {
            	    // InternalReqSpec.g:1226:4: ( (lv_include_16_0= ruleIncludeGlobalRequirement ) )
            	    // InternalReqSpec.g:1227:5: (lv_include_16_0= ruleIncludeGlobalRequirement )
            	    {
            	    // InternalReqSpec.g:1227:5: (lv_include_16_0= ruleIncludeGlobalRequirement )
            	    // InternalReqSpec.g:1228:6: lv_include_16_0= ruleIncludeGlobalRequirement
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getSystemRequirementSetAccess().getIncludeIncludeGlobalRequirementParserRuleCall_9_4_0());
            	      					
            	    }
            	    pushFollow(FollowSets000.FOLLOW_27);
            	    lv_include_16_0=ruleIncludeGlobalRequirement();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getSystemRequirementSetRule());
            	      						}
            	      						add(
            	      							current,
            	      							"include",
            	      							lv_include_16_0,
            	      							"org.osate.reqspec.ReqSpec.IncludeGlobalRequirement");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;
            	case 6 :
            	    // InternalReqSpec.g:1246:4: (otherlv_17= 'see' otherlv_18= 'document' ( (lv_docReference_19_0= ruleExternalDocument ) )+ )
            	    {
            	    // InternalReqSpec.g:1246:4: (otherlv_17= 'see' otherlv_18= 'document' ( (lv_docReference_19_0= ruleExternalDocument ) )+ )
            	    // InternalReqSpec.g:1247:5: otherlv_17= 'see' otherlv_18= 'document' ( (lv_docReference_19_0= ruleExternalDocument ) )+
            	    {
            	    otherlv_17=(Token)match(input,25,FollowSets000.FOLLOW_17); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					newLeafNode(otherlv_17, grammarAccess.getSystemRequirementSetAccess().getSeeKeyword_9_5_0());
            	      				
            	    }
            	    otherlv_18=(Token)match(input,26,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					newLeafNode(otherlv_18, grammarAccess.getSystemRequirementSetAccess().getDocumentKeyword_9_5_1());
            	      				
            	    }
            	    // InternalReqSpec.g:1255:5: ( (lv_docReference_19_0= ruleExternalDocument ) )+
            	    int cnt28=0;
            	    loop28:
            	    do {
            	        int alt28=2;
            	        int LA28_0 = input.LA(1);

            	        if ( (LA28_0==RULE_ID) ) {
            	            alt28=1;
            	        }


            	        switch (alt28) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:1256:6: (lv_docReference_19_0= ruleExternalDocument )
            	    	    {
            	    	    // InternalReqSpec.g:1256:6: (lv_docReference_19_0= ruleExternalDocument )
            	    	    // InternalReqSpec.g:1257:7: lv_docReference_19_0= ruleExternalDocument
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      							newCompositeNode(grammarAccess.getSystemRequirementSetAccess().getDocReferenceExternalDocumentParserRuleCall_9_5_2_0());
            	    	      						
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_28);
            	    	    lv_docReference_19_0=ruleExternalDocument();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      							if (current==null) {
            	    	      								current = createModelElementForParent(grammarAccess.getSystemRequirementSetRule());
            	    	      							}
            	    	      							add(
            	    	      								current,
            	    	      								"docReference",
            	    	      								lv_docReference_19_0,
            	    	      								"org.osate.reqspec.ReqSpec.ExternalDocument");
            	    	      							afterParserOrEnumRuleCall();
            	    	      						
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt28 >= 1 ) break loop28;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(28, input);
            	                throw eee;
            	        }
            	        cnt28++;
            	    } while (true);


            	    }


            	    }
            	    break;
            	case 7 :
            	    // InternalReqSpec.g:1276:4: (otherlv_20= 'see' otherlv_21= 'goals' ( ( ruleQualifiedName ) )+ )
            	    {
            	    // InternalReqSpec.g:1276:4: (otherlv_20= 'see' otherlv_21= 'goals' ( ( ruleQualifiedName ) )+ )
            	    // InternalReqSpec.g:1277:5: otherlv_20= 'see' otherlv_21= 'goals' ( ( ruleQualifiedName ) )+
            	    {
            	    otherlv_20=(Token)match(input,25,FollowSets000.FOLLOW_7); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					newLeafNode(otherlv_20, grammarAccess.getSystemRequirementSetAccess().getSeeKeyword_9_6_0());
            	      				
            	    }
            	    otherlv_21=(Token)match(input,21,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					newLeafNode(otherlv_21, grammarAccess.getSystemRequirementSetAccess().getGoalsKeyword_9_6_1());
            	      				
            	    }
            	    // InternalReqSpec.g:1285:5: ( ( ruleQualifiedName ) )+
            	    int cnt29=0;
            	    loop29:
            	    do {
            	        int alt29=2;
            	        int LA29_0 = input.LA(1);

            	        if ( (LA29_0==RULE_ID) ) {
            	            alt29=1;
            	        }


            	        switch (alt29) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:1286:6: ( ruleQualifiedName )
            	    	    {
            	    	    // InternalReqSpec.g:1286:6: ( ruleQualifiedName )
            	    	    // InternalReqSpec.g:1287:7: ruleQualifiedName
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      							if (current==null) {
            	    	      								current = createModelElement(grammarAccess.getSystemRequirementSetRule());
            	    	      							}
            	    	      						
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      							newCompositeNode(grammarAccess.getSystemRequirementSetAccess().getStakeholderGoalsReqRootCrossReference_9_6_2_0());
            	    	      						
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_28);
            	    	    ruleQualifiedName();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      							afterParserOrEnumRuleCall();
            	    	      						
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt29 >= 1 ) break loop29;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(29, input);
            	                throw eee;
            	        }
            	        cnt29++;
            	    } while (true);


            	    }


            	    }
            	    break;
            	case 8 :
            	    // InternalReqSpec.g:1303:4: (otherlv_23= 'issues' ( (lv_issues_24_0= RULE_STRING ) )+ )
            	    {
            	    // InternalReqSpec.g:1303:4: (otherlv_23= 'issues' ( (lv_issues_24_0= RULE_STRING ) )+ )
            	    // InternalReqSpec.g:1304:5: otherlv_23= 'issues' ( (lv_issues_24_0= RULE_STRING ) )+
            	    {
            	    otherlv_23=(Token)match(input,27,FollowSets000.FOLLOW_9); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					newLeafNode(otherlv_23, grammarAccess.getSystemRequirementSetAccess().getIssuesKeyword_9_7_0());
            	      				
            	    }
            	    // InternalReqSpec.g:1308:5: ( (lv_issues_24_0= RULE_STRING ) )+
            	    int cnt30=0;
            	    loop30:
            	    do {
            	        int alt30=2;
            	        int LA30_0 = input.LA(1);

            	        if ( (LA30_0==RULE_STRING) ) {
            	            alt30=1;
            	        }


            	        switch (alt30) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:1309:6: (lv_issues_24_0= RULE_STRING )
            	    	    {
            	    	    // InternalReqSpec.g:1309:6: (lv_issues_24_0= RULE_STRING )
            	    	    // InternalReqSpec.g:1310:7: lv_issues_24_0= RULE_STRING
            	    	    {
            	    	    lv_issues_24_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_29); if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      							newLeafNode(lv_issues_24_0, grammarAccess.getSystemRequirementSetAccess().getIssuesSTRINGTerminalRuleCall_9_7_1_0());
            	    	      						
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      							if (current==null) {
            	    	      								current = createModelElement(grammarAccess.getSystemRequirementSetRule());
            	    	      							}
            	    	      							addWithLastConsumed(
            	    	      								current,
            	    	      								"issues",
            	    	      								lv_issues_24_0,
            	    	      								"org.eclipse.xtext.common.Terminals.STRING");
            	    	      						
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt30 >= 1 ) break loop30;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(30, input);
            	                throw eee;
            	        }
            	        cnt30++;
            	    } while (true);


            	    }


            	    }
            	    break;

            	default :
            	    break loop31;
                }
            } while (true);

            otherlv_25=(Token)match(input,19,FollowSets000.FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_25, grammarAccess.getSystemRequirementSetAccess().getRightSquareBracketKeyword_10());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSystemRequirementSet"


    // $ANTLR start "entryRuleGlobalRequirementSet"
    // InternalReqSpec.g:1336:1: entryRuleGlobalRequirementSet returns [EObject current=null] : iv_ruleGlobalRequirementSet= ruleGlobalRequirementSet EOF ;
    public final EObject entryRuleGlobalRequirementSet() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleGlobalRequirementSet = null;


        try {
            // InternalReqSpec.g:1336:61: (iv_ruleGlobalRequirementSet= ruleGlobalRequirementSet EOF )
            // InternalReqSpec.g:1337:2: iv_ruleGlobalRequirementSet= ruleGlobalRequirementSet EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getGlobalRequirementSetRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleGlobalRequirementSet=ruleGlobalRequirementSet();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleGlobalRequirementSet; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleGlobalRequirementSet"


    // $ANTLR start "ruleGlobalRequirementSet"
    // InternalReqSpec.g:1343:1: ruleGlobalRequirementSet returns [EObject current=null] : ( () otherlv_1= 'global' otherlv_2= 'requirements' ( (lv_name_3_0= ruleQualifiedName ) ) (otherlv_4= ':' ( (lv_title_5_0= RULE_STRING ) ) )? (otherlv_6= 'use' otherlv_7= 'constants' ( ( ruleQualifiedName ) )+ )? otherlv_9= '[' ( ( (lv_description_10_0= ruleDescription ) ) | ( (lv_constants_11_0= ruleValDeclaration ) ) | ( (lv_computes_12_0= ruleComputeDeclaration ) ) | ( (lv_requirements_13_0= ruleGlobalRequirement ) ) | (otherlv_14= 'see' otherlv_15= 'document' ( (lv_docReference_16_0= ruleExternalDocument ) )+ ) | (otherlv_17= 'see' otherlv_18= 'goals' ( ( ruleQualifiedName ) )+ ) | (otherlv_20= 'issues' ( (lv_issues_21_0= RULE_STRING ) )+ ) )* otherlv_22= ']' ) ;
    public final EObject ruleGlobalRequirementSet() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token lv_title_5_0=null;
        Token otherlv_6=null;
        Token otherlv_7=null;
        Token otherlv_9=null;
        Token otherlv_14=null;
        Token otherlv_15=null;
        Token otherlv_17=null;
        Token otherlv_18=null;
        Token otherlv_20=null;
        Token lv_issues_21_0=null;
        Token otherlv_22=null;
        AntlrDatatypeRuleToken lv_name_3_0 = null;

        EObject lv_description_10_0 = null;

        EObject lv_constants_11_0 = null;

        EObject lv_computes_12_0 = null;

        EObject lv_requirements_13_0 = null;

        EObject lv_docReference_16_0 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:1349:2: ( ( () otherlv_1= 'global' otherlv_2= 'requirements' ( (lv_name_3_0= ruleQualifiedName ) ) (otherlv_4= ':' ( (lv_title_5_0= RULE_STRING ) ) )? (otherlv_6= 'use' otherlv_7= 'constants' ( ( ruleQualifiedName ) )+ )? otherlv_9= '[' ( ( (lv_description_10_0= ruleDescription ) ) | ( (lv_constants_11_0= ruleValDeclaration ) ) | ( (lv_computes_12_0= ruleComputeDeclaration ) ) | ( (lv_requirements_13_0= ruleGlobalRequirement ) ) | (otherlv_14= 'see' otherlv_15= 'document' ( (lv_docReference_16_0= ruleExternalDocument ) )+ ) | (otherlv_17= 'see' otherlv_18= 'goals' ( ( ruleQualifiedName ) )+ ) | (otherlv_20= 'issues' ( (lv_issues_21_0= RULE_STRING ) )+ ) )* otherlv_22= ']' ) )
            // InternalReqSpec.g:1350:2: ( () otherlv_1= 'global' otherlv_2= 'requirements' ( (lv_name_3_0= ruleQualifiedName ) ) (otherlv_4= ':' ( (lv_title_5_0= RULE_STRING ) ) )? (otherlv_6= 'use' otherlv_7= 'constants' ( ( ruleQualifiedName ) )+ )? otherlv_9= '[' ( ( (lv_description_10_0= ruleDescription ) ) | ( (lv_constants_11_0= ruleValDeclaration ) ) | ( (lv_computes_12_0= ruleComputeDeclaration ) ) | ( (lv_requirements_13_0= ruleGlobalRequirement ) ) | (otherlv_14= 'see' otherlv_15= 'document' ( (lv_docReference_16_0= ruleExternalDocument ) )+ ) | (otherlv_17= 'see' otherlv_18= 'goals' ( ( ruleQualifiedName ) )+ ) | (otherlv_20= 'issues' ( (lv_issues_21_0= RULE_STRING ) )+ ) )* otherlv_22= ']' )
            {
            // InternalReqSpec.g:1350:2: ( () otherlv_1= 'global' otherlv_2= 'requirements' ( (lv_name_3_0= ruleQualifiedName ) ) (otherlv_4= ':' ( (lv_title_5_0= RULE_STRING ) ) )? (otherlv_6= 'use' otherlv_7= 'constants' ( ( ruleQualifiedName ) )+ )? otherlv_9= '[' ( ( (lv_description_10_0= ruleDescription ) ) | ( (lv_constants_11_0= ruleValDeclaration ) ) | ( (lv_computes_12_0= ruleComputeDeclaration ) ) | ( (lv_requirements_13_0= ruleGlobalRequirement ) ) | (otherlv_14= 'see' otherlv_15= 'document' ( (lv_docReference_16_0= ruleExternalDocument ) )+ ) | (otherlv_17= 'see' otherlv_18= 'goals' ( ( ruleQualifiedName ) )+ ) | (otherlv_20= 'issues' ( (lv_issues_21_0= RULE_STRING ) )+ ) )* otherlv_22= ']' )
            // InternalReqSpec.g:1351:3: () otherlv_1= 'global' otherlv_2= 'requirements' ( (lv_name_3_0= ruleQualifiedName ) ) (otherlv_4= ':' ( (lv_title_5_0= RULE_STRING ) ) )? (otherlv_6= 'use' otherlv_7= 'constants' ( ( ruleQualifiedName ) )+ )? otherlv_9= '[' ( ( (lv_description_10_0= ruleDescription ) ) | ( (lv_constants_11_0= ruleValDeclaration ) ) | ( (lv_computes_12_0= ruleComputeDeclaration ) ) | ( (lv_requirements_13_0= ruleGlobalRequirement ) ) | (otherlv_14= 'see' otherlv_15= 'document' ( (lv_docReference_16_0= ruleExternalDocument ) )+ ) | (otherlv_17= 'see' otherlv_18= 'goals' ( ( ruleQualifiedName ) )+ ) | (otherlv_20= 'issues' ( (lv_issues_21_0= RULE_STRING ) )+ ) )* otherlv_22= ']'
            {
            // InternalReqSpec.g:1351:3: ()
            // InternalReqSpec.g:1352:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getGlobalRequirementSetAccess().getGlobalRequirementSetAction_0(),
              					current);
              			
            }

            }

            otherlv_1=(Token)match(input,31,FollowSets000.FOLLOW_26); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getGlobalRequirementSetAccess().getGlobalKeyword_1());
              		
            }
            otherlv_2=(Token)match(input,30,FollowSets000.FOLLOW_4); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_2, grammarAccess.getGlobalRequirementSetAccess().getRequirementsKeyword_2());
              		
            }
            // InternalReqSpec.g:1366:3: ( (lv_name_3_0= ruleQualifiedName ) )
            // InternalReqSpec.g:1367:4: (lv_name_3_0= ruleQualifiedName )
            {
            // InternalReqSpec.g:1367:4: (lv_name_3_0= ruleQualifiedName )
            // InternalReqSpec.g:1368:5: lv_name_3_0= ruleQualifiedName
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getGlobalRequirementSetAccess().getNameQualifiedNameParserRuleCall_3_0());
              				
            }
            pushFollow(FollowSets000.FOLLOW_30);
            lv_name_3_0=ruleQualifiedName();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getGlobalRequirementSetRule());
              					}
              					set(
              						current,
              						"name",
              						lv_name_3_0,
              						"org.osate.alisa.common.Common.QualifiedName");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalReqSpec.g:1385:3: (otherlv_4= ':' ( (lv_title_5_0= RULE_STRING ) ) )?
            int alt32=2;
            int LA32_0 = input.LA(1);

            if ( (LA32_0==22) ) {
                alt32=1;
            }
            switch (alt32) {
                case 1 :
                    // InternalReqSpec.g:1386:4: otherlv_4= ':' ( (lv_title_5_0= RULE_STRING ) )
                    {
                    otherlv_4=(Token)match(input,22,FollowSets000.FOLLOW_9); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_4, grammarAccess.getGlobalRequirementSetAccess().getColonKeyword_4_0());
                      			
                    }
                    // InternalReqSpec.g:1390:4: ( (lv_title_5_0= RULE_STRING ) )
                    // InternalReqSpec.g:1391:5: (lv_title_5_0= RULE_STRING )
                    {
                    // InternalReqSpec.g:1391:5: (lv_title_5_0= RULE_STRING )
                    // InternalReqSpec.g:1392:6: lv_title_5_0= RULE_STRING
                    {
                    lv_title_5_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_12); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_title_5_0, grammarAccess.getGlobalRequirementSetAccess().getTitleSTRINGTerminalRuleCall_4_1_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getGlobalRequirementSetRule());
                      						}
                      						setWithLastConsumed(
                      							current,
                      							"title",
                      							lv_title_5_0,
                      							"org.eclipse.xtext.common.Terminals.STRING");
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            // InternalReqSpec.g:1409:3: (otherlv_6= 'use' otherlv_7= 'constants' ( ( ruleQualifiedName ) )+ )?
            int alt34=2;
            int LA34_0 = input.LA(1);

            if ( (LA34_0==24) ) {
                alt34=1;
            }
            switch (alt34) {
                case 1 :
                    // InternalReqSpec.g:1410:4: otherlv_6= 'use' otherlv_7= 'constants' ( ( ruleQualifiedName ) )+
                    {
                    otherlv_6=(Token)match(input,24,FollowSets000.FOLLOW_14); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_6, grammarAccess.getGlobalRequirementSetAccess().getUseKeyword_5_0());
                      			
                    }
                    otherlv_7=(Token)match(input,17,FollowSets000.FOLLOW_4); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_7, grammarAccess.getGlobalRequirementSetAccess().getConstantsKeyword_5_1());
                      			
                    }
                    // InternalReqSpec.g:1418:4: ( ( ruleQualifiedName ) )+
                    int cnt33=0;
                    loop33:
                    do {
                        int alt33=2;
                        int LA33_0 = input.LA(1);

                        if ( (LA33_0==RULE_ID) ) {
                            alt33=1;
                        }


                        switch (alt33) {
                    	case 1 :
                    	    // InternalReqSpec.g:1419:5: ( ruleQualifiedName )
                    	    {
                    	    // InternalReqSpec.g:1419:5: ( ruleQualifiedName )
                    	    // InternalReqSpec.g:1420:6: ruleQualifiedName
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      						if (current==null) {
                    	      							current = createModelElement(grammarAccess.getGlobalRequirementSetRule());
                    	      						}
                    	      					
                    	    }
                    	    if ( state.backtracking==0 ) {

                    	      						newCompositeNode(grammarAccess.getGlobalRequirementSetAccess().getImportConstantsGlobalConstantsCrossReference_5_2_0());
                    	      					
                    	    }
                    	    pushFollow(FollowSets000.FOLLOW_15);
                    	    ruleQualifiedName();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      						afterParserOrEnumRuleCall();
                    	      					
                    	    }

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt33 >= 1 ) break loop33;
                    	    if (state.backtracking>0) {state.failed=true; return current;}
                                EarlyExitException eee =
                                    new EarlyExitException(33, input);
                                throw eee;
                        }
                        cnt33++;
                    } while (true);


                    }
                    break;

            }

            otherlv_9=(Token)match(input,18,FollowSets000.FOLLOW_31); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_9, grammarAccess.getGlobalRequirementSetAccess().getLeftSquareBracketKeyword_6());
              		
            }
            // InternalReqSpec.g:1439:3: ( ( (lv_description_10_0= ruleDescription ) ) | ( (lv_constants_11_0= ruleValDeclaration ) ) | ( (lv_computes_12_0= ruleComputeDeclaration ) ) | ( (lv_requirements_13_0= ruleGlobalRequirement ) ) | (otherlv_14= 'see' otherlv_15= 'document' ( (lv_docReference_16_0= ruleExternalDocument ) )+ ) | (otherlv_17= 'see' otherlv_18= 'goals' ( ( ruleQualifiedName ) )+ ) | (otherlv_20= 'issues' ( (lv_issues_21_0= RULE_STRING ) )+ ) )*
            loop38:
            do {
                int alt38=8;
                alt38 = dfa38.predict(input);
                switch (alt38) {
            	case 1 :
            	    // InternalReqSpec.g:1440:4: ( (lv_description_10_0= ruleDescription ) )
            	    {
            	    // InternalReqSpec.g:1440:4: ( (lv_description_10_0= ruleDescription ) )
            	    // InternalReqSpec.g:1441:5: (lv_description_10_0= ruleDescription )
            	    {
            	    // InternalReqSpec.g:1441:5: (lv_description_10_0= ruleDescription )
            	    // InternalReqSpec.g:1442:6: lv_description_10_0= ruleDescription
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getGlobalRequirementSetAccess().getDescriptionDescriptionParserRuleCall_7_0_0());
            	      					
            	    }
            	    pushFollow(FollowSets000.FOLLOW_31);
            	    lv_description_10_0=ruleDescription();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getGlobalRequirementSetRule());
            	      						}
            	      						set(
            	      							current,
            	      							"description",
            	      							lv_description_10_0,
            	      							"org.osate.alisa.common.Common.Description");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // InternalReqSpec.g:1460:4: ( (lv_constants_11_0= ruleValDeclaration ) )
            	    {
            	    // InternalReqSpec.g:1460:4: ( (lv_constants_11_0= ruleValDeclaration ) )
            	    // InternalReqSpec.g:1461:5: (lv_constants_11_0= ruleValDeclaration )
            	    {
            	    // InternalReqSpec.g:1461:5: (lv_constants_11_0= ruleValDeclaration )
            	    // InternalReqSpec.g:1462:6: lv_constants_11_0= ruleValDeclaration
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getGlobalRequirementSetAccess().getConstantsValDeclarationParserRuleCall_7_1_0());
            	      					
            	    }
            	    pushFollow(FollowSets000.FOLLOW_31);
            	    lv_constants_11_0=ruleValDeclaration();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getGlobalRequirementSetRule());
            	      						}
            	      						add(
            	      							current,
            	      							"constants",
            	      							lv_constants_11_0,
            	      							"org.osate.reqspec.ReqSpec.ValDeclaration");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;
            	case 3 :
            	    // InternalReqSpec.g:1480:4: ( (lv_computes_12_0= ruleComputeDeclaration ) )
            	    {
            	    // InternalReqSpec.g:1480:4: ( (lv_computes_12_0= ruleComputeDeclaration ) )
            	    // InternalReqSpec.g:1481:5: (lv_computes_12_0= ruleComputeDeclaration )
            	    {
            	    // InternalReqSpec.g:1481:5: (lv_computes_12_0= ruleComputeDeclaration )
            	    // InternalReqSpec.g:1482:6: lv_computes_12_0= ruleComputeDeclaration
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getGlobalRequirementSetAccess().getComputesComputeDeclarationParserRuleCall_7_2_0());
            	      					
            	    }
            	    pushFollow(FollowSets000.FOLLOW_31);
            	    lv_computes_12_0=ruleComputeDeclaration();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getGlobalRequirementSetRule());
            	      						}
            	      						add(
            	      							current,
            	      							"computes",
            	      							lv_computes_12_0,
            	      							"org.osate.alisa.common.Common.ComputeDeclaration");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;
            	case 4 :
            	    // InternalReqSpec.g:1500:4: ( (lv_requirements_13_0= ruleGlobalRequirement ) )
            	    {
            	    // InternalReqSpec.g:1500:4: ( (lv_requirements_13_0= ruleGlobalRequirement ) )
            	    // InternalReqSpec.g:1501:5: (lv_requirements_13_0= ruleGlobalRequirement )
            	    {
            	    // InternalReqSpec.g:1501:5: (lv_requirements_13_0= ruleGlobalRequirement )
            	    // InternalReqSpec.g:1502:6: lv_requirements_13_0= ruleGlobalRequirement
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getGlobalRequirementSetAccess().getRequirementsGlobalRequirementParserRuleCall_7_3_0());
            	      					
            	    }
            	    pushFollow(FollowSets000.FOLLOW_31);
            	    lv_requirements_13_0=ruleGlobalRequirement();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getGlobalRequirementSetRule());
            	      						}
            	      						add(
            	      							current,
            	      							"requirements",
            	      							lv_requirements_13_0,
            	      							"org.osate.reqspec.ReqSpec.GlobalRequirement");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;
            	case 5 :
            	    // InternalReqSpec.g:1520:4: (otherlv_14= 'see' otherlv_15= 'document' ( (lv_docReference_16_0= ruleExternalDocument ) )+ )
            	    {
            	    // InternalReqSpec.g:1520:4: (otherlv_14= 'see' otherlv_15= 'document' ( (lv_docReference_16_0= ruleExternalDocument ) )+ )
            	    // InternalReqSpec.g:1521:5: otherlv_14= 'see' otherlv_15= 'document' ( (lv_docReference_16_0= ruleExternalDocument ) )+
            	    {
            	    otherlv_14=(Token)match(input,25,FollowSets000.FOLLOW_17); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					newLeafNode(otherlv_14, grammarAccess.getGlobalRequirementSetAccess().getSeeKeyword_7_4_0());
            	      				
            	    }
            	    otherlv_15=(Token)match(input,26,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					newLeafNode(otherlv_15, grammarAccess.getGlobalRequirementSetAccess().getDocumentKeyword_7_4_1());
            	      				
            	    }
            	    // InternalReqSpec.g:1529:5: ( (lv_docReference_16_0= ruleExternalDocument ) )+
            	    int cnt35=0;
            	    loop35:
            	    do {
            	        int alt35=2;
            	        int LA35_0 = input.LA(1);

            	        if ( (LA35_0==RULE_ID) ) {
            	            alt35=1;
            	        }


            	        switch (alt35) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:1530:6: (lv_docReference_16_0= ruleExternalDocument )
            	    	    {
            	    	    // InternalReqSpec.g:1530:6: (lv_docReference_16_0= ruleExternalDocument )
            	    	    // InternalReqSpec.g:1531:7: lv_docReference_16_0= ruleExternalDocument
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      							newCompositeNode(grammarAccess.getGlobalRequirementSetAccess().getDocReferenceExternalDocumentParserRuleCall_7_4_2_0());
            	    	      						
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_32);
            	    	    lv_docReference_16_0=ruleExternalDocument();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      							if (current==null) {
            	    	      								current = createModelElementForParent(grammarAccess.getGlobalRequirementSetRule());
            	    	      							}
            	    	      							add(
            	    	      								current,
            	    	      								"docReference",
            	    	      								lv_docReference_16_0,
            	    	      								"org.osate.reqspec.ReqSpec.ExternalDocument");
            	    	      							afterParserOrEnumRuleCall();
            	    	      						
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt35 >= 1 ) break loop35;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(35, input);
            	                throw eee;
            	        }
            	        cnt35++;
            	    } while (true);


            	    }


            	    }
            	    break;
            	case 6 :
            	    // InternalReqSpec.g:1550:4: (otherlv_17= 'see' otherlv_18= 'goals' ( ( ruleQualifiedName ) )+ )
            	    {
            	    // InternalReqSpec.g:1550:4: (otherlv_17= 'see' otherlv_18= 'goals' ( ( ruleQualifiedName ) )+ )
            	    // InternalReqSpec.g:1551:5: otherlv_17= 'see' otherlv_18= 'goals' ( ( ruleQualifiedName ) )+
            	    {
            	    otherlv_17=(Token)match(input,25,FollowSets000.FOLLOW_7); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					newLeafNode(otherlv_17, grammarAccess.getGlobalRequirementSetAccess().getSeeKeyword_7_5_0());
            	      				
            	    }
            	    otherlv_18=(Token)match(input,21,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					newLeafNode(otherlv_18, grammarAccess.getGlobalRequirementSetAccess().getGoalsKeyword_7_5_1());
            	      				
            	    }
            	    // InternalReqSpec.g:1559:5: ( ( ruleQualifiedName ) )+
            	    int cnt36=0;
            	    loop36:
            	    do {
            	        int alt36=2;
            	        int LA36_0 = input.LA(1);

            	        if ( (LA36_0==RULE_ID) ) {
            	            alt36=1;
            	        }


            	        switch (alt36) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:1560:6: ( ruleQualifiedName )
            	    	    {
            	    	    // InternalReqSpec.g:1560:6: ( ruleQualifiedName )
            	    	    // InternalReqSpec.g:1561:7: ruleQualifiedName
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      							if (current==null) {
            	    	      								current = createModelElement(grammarAccess.getGlobalRequirementSetRule());
            	    	      							}
            	    	      						
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      							newCompositeNode(grammarAccess.getGlobalRequirementSetAccess().getStakeholderGoalsReqRootCrossReference_7_5_2_0());
            	    	      						
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_32);
            	    	    ruleQualifiedName();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      							afterParserOrEnumRuleCall();
            	    	      						
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt36 >= 1 ) break loop36;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(36, input);
            	                throw eee;
            	        }
            	        cnt36++;
            	    } while (true);


            	    }


            	    }
            	    break;
            	case 7 :
            	    // InternalReqSpec.g:1577:4: (otherlv_20= 'issues' ( (lv_issues_21_0= RULE_STRING ) )+ )
            	    {
            	    // InternalReqSpec.g:1577:4: (otherlv_20= 'issues' ( (lv_issues_21_0= RULE_STRING ) )+ )
            	    // InternalReqSpec.g:1578:5: otherlv_20= 'issues' ( (lv_issues_21_0= RULE_STRING ) )+
            	    {
            	    otherlv_20=(Token)match(input,27,FollowSets000.FOLLOW_9); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					newLeafNode(otherlv_20, grammarAccess.getGlobalRequirementSetAccess().getIssuesKeyword_7_6_0());
            	      				
            	    }
            	    // InternalReqSpec.g:1582:5: ( (lv_issues_21_0= RULE_STRING ) )+
            	    int cnt37=0;
            	    loop37:
            	    do {
            	        int alt37=2;
            	        int LA37_0 = input.LA(1);

            	        if ( (LA37_0==RULE_STRING) ) {
            	            alt37=1;
            	        }


            	        switch (alt37) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:1583:6: (lv_issues_21_0= RULE_STRING )
            	    	    {
            	    	    // InternalReqSpec.g:1583:6: (lv_issues_21_0= RULE_STRING )
            	    	    // InternalReqSpec.g:1584:7: lv_issues_21_0= RULE_STRING
            	    	    {
            	    	    lv_issues_21_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_33); if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      							newLeafNode(lv_issues_21_0, grammarAccess.getGlobalRequirementSetAccess().getIssuesSTRINGTerminalRuleCall_7_6_1_0());
            	    	      						
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      							if (current==null) {
            	    	      								current = createModelElement(grammarAccess.getGlobalRequirementSetRule());
            	    	      							}
            	    	      							addWithLastConsumed(
            	    	      								current,
            	    	      								"issues",
            	    	      								lv_issues_21_0,
            	    	      								"org.eclipse.xtext.common.Terminals.STRING");
            	    	      						
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt37 >= 1 ) break loop37;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(37, input);
            	                throw eee;
            	        }
            	        cnt37++;
            	    } while (true);


            	    }


            	    }
            	    break;

            	default :
            	    break loop38;
                }
            } while (true);

            otherlv_22=(Token)match(input,19,FollowSets000.FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_22, grammarAccess.getGlobalRequirementSetAccess().getRightSquareBracketKeyword_8());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleGlobalRequirementSet"


    // $ANTLR start "entryRuleDocGoal"
    // InternalReqSpec.g:1610:1: entryRuleDocGoal returns [EObject current=null] : iv_ruleDocGoal= ruleDocGoal EOF ;
    public final EObject entryRuleDocGoal() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDocGoal = null;


        try {
            // InternalReqSpec.g:1610:48: (iv_ruleDocGoal= ruleDocGoal EOF )
            // InternalReqSpec.g:1611:2: iv_ruleDocGoal= ruleDocGoal EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getDocGoalRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleDocGoal=ruleDocGoal();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleDocGoal; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDocGoal"


    // $ANTLR start "ruleDocGoal"
    // InternalReqSpec.g:1617:1: ruleDocGoal returns [EObject current=null] : (otherlv_0= 'goal' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? (otherlv_4= 'for' ( ( (lv_targetDescription_5_0= RULE_STRING ) ) | ( ( ( ruleAadlClassifierReference ) ) ( (otherlv_7= RULE_ID ) )? ) ) )? otherlv_8= '[' ( ( ( ( ({...}? => ( ({...}? => (otherlv_10= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_12_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_13_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_15_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_16_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_17= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'conflicts' otherlv_20= 'with' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_24_0= 'dropped' ) ) ( (lv_dropRationale_25_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'see' otherlv_29= 'document' ( (lv_docReference_30_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_31= 'issues' ( (lv_issues_32_0= RULE_STRING ) )+ ) ) ) ) )* ) ) ) otherlv_33= ']' ) ;
    public final EObject ruleDocGoal() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token lv_title_3_0=null;
        Token otherlv_4=null;
        Token lv_targetDescription_5_0=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token otherlv_10=null;
        Token otherlv_17=null;
        Token otherlv_19=null;
        Token otherlv_20=null;
        Token otherlv_22=null;
        Token lv_dropped_24_0=null;
        Token lv_dropRationale_25_0=null;
        Token otherlv_26=null;
        Token otherlv_28=null;
        Token otherlv_29=null;
        Token otherlv_31=null;
        Token lv_issues_32_0=null;
        Token otherlv_33=null;
        EObject lv_description_12_0 = null;

        EObject lv_constants_13_0 = null;

        EObject lv_whencondition_14_0 = null;

        EObject lv_rationale_15_0 = null;

        EObject lv_changeUncertainty_16_0 = null;

        EObject lv_docReference_30_0 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:1623:2: ( (otherlv_0= 'goal' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? (otherlv_4= 'for' ( ( (lv_targetDescription_5_0= RULE_STRING ) ) | ( ( ( ruleAadlClassifierReference ) ) ( (otherlv_7= RULE_ID ) )? ) ) )? otherlv_8= '[' ( ( ( ( ({...}? => ( ({...}? => (otherlv_10= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_12_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_13_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_15_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_16_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_17= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'conflicts' otherlv_20= 'with' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_24_0= 'dropped' ) ) ( (lv_dropRationale_25_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'see' otherlv_29= 'document' ( (lv_docReference_30_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_31= 'issues' ( (lv_issues_32_0= RULE_STRING ) )+ ) ) ) ) )* ) ) ) otherlv_33= ']' ) )
            // InternalReqSpec.g:1624:2: (otherlv_0= 'goal' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? (otherlv_4= 'for' ( ( (lv_targetDescription_5_0= RULE_STRING ) ) | ( ( ( ruleAadlClassifierReference ) ) ( (otherlv_7= RULE_ID ) )? ) ) )? otherlv_8= '[' ( ( ( ( ({...}? => ( ({...}? => (otherlv_10= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_12_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_13_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_15_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_16_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_17= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'conflicts' otherlv_20= 'with' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_24_0= 'dropped' ) ) ( (lv_dropRationale_25_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'see' otherlv_29= 'document' ( (lv_docReference_30_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_31= 'issues' ( (lv_issues_32_0= RULE_STRING ) )+ ) ) ) ) )* ) ) ) otherlv_33= ']' )
            {
            // InternalReqSpec.g:1624:2: (otherlv_0= 'goal' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? (otherlv_4= 'for' ( ( (lv_targetDescription_5_0= RULE_STRING ) ) | ( ( ( ruleAadlClassifierReference ) ) ( (otherlv_7= RULE_ID ) )? ) ) )? otherlv_8= '[' ( ( ( ( ({...}? => ( ({...}? => (otherlv_10= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_12_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_13_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_15_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_16_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_17= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'conflicts' otherlv_20= 'with' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_24_0= 'dropped' ) ) ( (lv_dropRationale_25_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'see' otherlv_29= 'document' ( (lv_docReference_30_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_31= 'issues' ( (lv_issues_32_0= RULE_STRING ) )+ ) ) ) ) )* ) ) ) otherlv_33= ']' )
            // InternalReqSpec.g:1625:3: otherlv_0= 'goal' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? (otherlv_4= 'for' ( ( (lv_targetDescription_5_0= RULE_STRING ) ) | ( ( ( ruleAadlClassifierReference ) ) ( (otherlv_7= RULE_ID ) )? ) ) )? otherlv_8= '[' ( ( ( ( ({...}? => ( ({...}? => (otherlv_10= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_12_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_13_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_15_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_16_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_17= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'conflicts' otherlv_20= 'with' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_24_0= 'dropped' ) ) ( (lv_dropRationale_25_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'see' otherlv_29= 'document' ( (lv_docReference_30_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_31= 'issues' ( (lv_issues_32_0= RULE_STRING ) )+ ) ) ) ) )* ) ) ) otherlv_33= ']'
            {
            otherlv_0=(Token)match(input,32,FollowSets000.FOLLOW_4); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getDocGoalAccess().getGoalKeyword_0());
              		
            }
            // InternalReqSpec.g:1629:3: ( (lv_name_1_0= RULE_ID ) )
            // InternalReqSpec.g:1630:4: (lv_name_1_0= RULE_ID )
            {
            // InternalReqSpec.g:1630:4: (lv_name_1_0= RULE_ID )
            // InternalReqSpec.g:1631:5: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_34); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_1_0, grammarAccess.getDocGoalAccess().getNameIDTerminalRuleCall_1_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getDocGoalRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_1_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalReqSpec.g:1647:3: (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )?
            int alt39=2;
            int LA39_0 = input.LA(1);

            if ( (LA39_0==22) ) {
                alt39=1;
            }
            switch (alt39) {
                case 1 :
                    // InternalReqSpec.g:1648:4: otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) )
                    {
                    otherlv_2=(Token)match(input,22,FollowSets000.FOLLOW_9); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_2, grammarAccess.getDocGoalAccess().getColonKeyword_2_0());
                      			
                    }
                    // InternalReqSpec.g:1652:4: ( (lv_title_3_0= RULE_STRING ) )
                    // InternalReqSpec.g:1653:5: (lv_title_3_0= RULE_STRING )
                    {
                    // InternalReqSpec.g:1653:5: (lv_title_3_0= RULE_STRING )
                    // InternalReqSpec.g:1654:6: lv_title_3_0= RULE_STRING
                    {
                    lv_title_3_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_35); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_title_3_0, grammarAccess.getDocGoalAccess().getTitleSTRINGTerminalRuleCall_2_1_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getDocGoalRule());
                      						}
                      						setWithLastConsumed(
                      							current,
                      							"title",
                      							lv_title_3_0,
                      							"org.eclipse.xtext.common.Terminals.STRING");
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            // InternalReqSpec.g:1671:3: (otherlv_4= 'for' ( ( (lv_targetDescription_5_0= RULE_STRING ) ) | ( ( ( ruleAadlClassifierReference ) ) ( (otherlv_7= RULE_ID ) )? ) ) )?
            int alt42=2;
            int LA42_0 = input.LA(1);

            if ( (LA42_0==23) ) {
                alt42=1;
            }
            switch (alt42) {
                case 1 :
                    // InternalReqSpec.g:1672:4: otherlv_4= 'for' ( ( (lv_targetDescription_5_0= RULE_STRING ) ) | ( ( ( ruleAadlClassifierReference ) ) ( (otherlv_7= RULE_ID ) )? ) )
                    {
                    otherlv_4=(Token)match(input,23,FollowSets000.FOLLOW_24); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_4, grammarAccess.getDocGoalAccess().getForKeyword_3_0());
                      			
                    }
                    // InternalReqSpec.g:1676:4: ( ( (lv_targetDescription_5_0= RULE_STRING ) ) | ( ( ( ruleAadlClassifierReference ) ) ( (otherlv_7= RULE_ID ) )? ) )
                    int alt41=2;
                    int LA41_0 = input.LA(1);

                    if ( (LA41_0==RULE_STRING) ) {
                        alt41=1;
                    }
                    else if ( (LA41_0==RULE_ID) ) {
                        alt41=2;
                    }
                    else {
                        if (state.backtracking>0) {state.failed=true; return current;}
                        NoViableAltException nvae =
                            new NoViableAltException("", 41, 0, input);

                        throw nvae;
                    }
                    switch (alt41) {
                        case 1 :
                            // InternalReqSpec.g:1677:5: ( (lv_targetDescription_5_0= RULE_STRING ) )
                            {
                            // InternalReqSpec.g:1677:5: ( (lv_targetDescription_5_0= RULE_STRING ) )
                            // InternalReqSpec.g:1678:6: (lv_targetDescription_5_0= RULE_STRING )
                            {
                            // InternalReqSpec.g:1678:6: (lv_targetDescription_5_0= RULE_STRING )
                            // InternalReqSpec.g:1679:7: lv_targetDescription_5_0= RULE_STRING
                            {
                            lv_targetDescription_5_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_5); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							newLeafNode(lv_targetDescription_5_0, grammarAccess.getDocGoalAccess().getTargetDescriptionSTRINGTerminalRuleCall_3_1_0_0());
                              						
                            }
                            if ( state.backtracking==0 ) {

                              							if (current==null) {
                              								current = createModelElement(grammarAccess.getDocGoalRule());
                              							}
                              							setWithLastConsumed(
                              								current,
                              								"targetDescription",
                              								lv_targetDescription_5_0,
                              								"org.eclipse.xtext.common.Terminals.STRING");
                              						
                            }

                            }


                            }


                            }
                            break;
                        case 2 :
                            // InternalReqSpec.g:1696:5: ( ( ( ruleAadlClassifierReference ) ) ( (otherlv_7= RULE_ID ) )? )
                            {
                            // InternalReqSpec.g:1696:5: ( ( ( ruleAadlClassifierReference ) ) ( (otherlv_7= RULE_ID ) )? )
                            // InternalReqSpec.g:1697:6: ( ( ruleAadlClassifierReference ) ) ( (otherlv_7= RULE_ID ) )?
                            {
                            // InternalReqSpec.g:1697:6: ( ( ruleAadlClassifierReference ) )
                            // InternalReqSpec.g:1698:7: ( ruleAadlClassifierReference )
                            {
                            // InternalReqSpec.g:1698:7: ( ruleAadlClassifierReference )
                            // InternalReqSpec.g:1699:8: ruleAadlClassifierReference
                            {
                            if ( state.backtracking==0 ) {

                              								if (current==null) {
                              									current = createModelElement(grammarAccess.getDocGoalRule());
                              								}
                              							
                            }
                            if ( state.backtracking==0 ) {

                              								newCompositeNode(grammarAccess.getDocGoalAccess().getTargetComponentClassifierCrossReference_3_1_1_0_0());
                              							
                            }
                            pushFollow(FollowSets000.FOLLOW_15);
                            ruleAadlClassifierReference();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              								afterParserOrEnumRuleCall();
                              							
                            }

                            }


                            }

                            // InternalReqSpec.g:1713:6: ( (otherlv_7= RULE_ID ) )?
                            int alt40=2;
                            int LA40_0 = input.LA(1);

                            if ( (LA40_0==RULE_ID) ) {
                                alt40=1;
                            }
                            switch (alt40) {
                                case 1 :
                                    // InternalReqSpec.g:1714:7: (otherlv_7= RULE_ID )
                                    {
                                    // InternalReqSpec.g:1714:7: (otherlv_7= RULE_ID )
                                    // InternalReqSpec.g:1715:8: otherlv_7= RULE_ID
                                    {
                                    if ( state.backtracking==0 ) {

                                      								if (current==null) {
                                      									current = createModelElement(grammarAccess.getDocGoalRule());
                                      								}
                                      							
                                    }
                                    otherlv_7=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_5); if (state.failed) return current;
                                    if ( state.backtracking==0 ) {

                                      								newLeafNode(otherlv_7, grammarAccess.getDocGoalAccess().getTargetElementNamedElementCrossReference_3_1_1_1_0());
                                      							
                                    }

                                    }


                                    }
                                    break;

                            }


                            }


                            }
                            break;

                    }


                    }
                    break;

            }

            otherlv_8=(Token)match(input,18,FollowSets000.FOLLOW_36); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_8, grammarAccess.getDocGoalAccess().getLeftSquareBracketKeyword_4());
              		
            }
            // InternalReqSpec.g:1733:3: ( ( ( ( ({...}? => ( ({...}? => (otherlv_10= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_12_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_13_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_15_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_16_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_17= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'conflicts' otherlv_20= 'with' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_24_0= 'dropped' ) ) ( (lv_dropRationale_25_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'see' otherlv_29= 'document' ( (lv_docReference_30_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_31= 'issues' ( (lv_issues_32_0= RULE_STRING ) )+ ) ) ) ) )* ) ) )
            // InternalReqSpec.g:1734:4: ( ( ( ({...}? => ( ({...}? => (otherlv_10= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_12_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_13_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_15_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_16_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_17= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'conflicts' otherlv_20= 'with' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_24_0= 'dropped' ) ) ( (lv_dropRationale_25_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'see' otherlv_29= 'document' ( (lv_docReference_30_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_31= 'issues' ( (lv_issues_32_0= RULE_STRING ) )+ ) ) ) ) )* ) )
            {
            // InternalReqSpec.g:1734:4: ( ( ( ({...}? => ( ({...}? => (otherlv_10= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_12_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_13_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_15_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_16_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_17= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'conflicts' otherlv_20= 'with' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_24_0= 'dropped' ) ) ( (lv_dropRationale_25_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'see' otherlv_29= 'document' ( (lv_docReference_30_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_31= 'issues' ( (lv_issues_32_0= RULE_STRING ) )+ ) ) ) ) )* ) )
            // InternalReqSpec.g:1735:5: ( ( ({...}? => ( ({...}? => (otherlv_10= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_12_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_13_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_15_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_16_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_17= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'conflicts' otherlv_20= 'with' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_24_0= 'dropped' ) ) ( (lv_dropRationale_25_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'see' otherlv_29= 'document' ( (lv_docReference_30_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_31= 'issues' ( (lv_issues_32_0= RULE_STRING ) )+ ) ) ) ) )* )
            {
            getUnorderedGroupHelper().enter(grammarAccess.getDocGoalAccess().getUnorderedGroup_5());
            // InternalReqSpec.g:1738:5: ( ( ({...}? => ( ({...}? => (otherlv_10= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_12_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_13_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_15_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_16_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_17= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'conflicts' otherlv_20= 'with' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_24_0= 'dropped' ) ) ( (lv_dropRationale_25_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'see' otherlv_29= 'document' ( (lv_docReference_30_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_31= 'issues' ( (lv_issues_32_0= RULE_STRING ) )+ ) ) ) ) )* )
            // InternalReqSpec.g:1739:6: ( ({...}? => ( ({...}? => (otherlv_10= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_12_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_13_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_15_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_16_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_17= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'conflicts' otherlv_20= 'with' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_24_0= 'dropped' ) ) ( (lv_dropRationale_25_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'see' otherlv_29= 'document' ( (lv_docReference_30_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_31= 'issues' ( (lv_issues_32_0= RULE_STRING ) )+ ) ) ) ) )*
            {
            // InternalReqSpec.g:1739:6: ( ({...}? => ( ({...}? => (otherlv_10= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_12_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_13_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_15_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_16_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_17= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'conflicts' otherlv_20= 'with' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_24_0= 'dropped' ) ) ( (lv_dropRationale_25_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'see' otherlv_29= 'document' ( (lv_docReference_30_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_31= 'issues' ( (lv_issues_32_0= RULE_STRING ) )+ ) ) ) ) )*
            loop52:
            do {
                int alt52=14;
                alt52 = dfa52.predict(input);
                switch (alt52) {
            	case 1 :
            	    // InternalReqSpec.g:1740:4: ({...}? => ( ({...}? => (otherlv_10= 'category' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    {
            	    // InternalReqSpec.g:1740:4: ({...}? => ( ({...}? => (otherlv_10= 'category' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    // InternalReqSpec.g:1741:5: {...}? => ( ({...}? => (otherlv_10= 'category' ( ( ruleQualifiedName ) )+ ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 0) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocGoal", "getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 0)");
            	    }
            	    // InternalReqSpec.g:1741:104: ( ({...}? => (otherlv_10= 'category' ( ( ruleQualifiedName ) )+ ) ) )
            	    // InternalReqSpec.g:1742:6: ({...}? => (otherlv_10= 'category' ( ( ruleQualifiedName ) )+ ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 0);
            	    // InternalReqSpec.g:1745:9: ({...}? => (otherlv_10= 'category' ( ( ruleQualifiedName ) )+ ) )
            	    // InternalReqSpec.g:1745:10: {...}? => (otherlv_10= 'category' ( ( ruleQualifiedName ) )+ )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocGoal", "true");
            	    }
            	    // InternalReqSpec.g:1745:19: (otherlv_10= 'category' ( ( ruleQualifiedName ) )+ )
            	    // InternalReqSpec.g:1745:20: otherlv_10= 'category' ( ( ruleQualifiedName ) )+
            	    {
            	    otherlv_10=(Token)match(input,33,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_10, grammarAccess.getDocGoalAccess().getCategoryKeyword_5_0_0());
            	      								
            	    }
            	    // InternalReqSpec.g:1749:9: ( ( ruleQualifiedName ) )+
            	    int cnt43=0;
            	    loop43:
            	    do {
            	        int alt43=2;
            	        int LA43_0 = input.LA(1);

            	        if ( (LA43_0==RULE_ID) ) {
            	            alt43=1;
            	        }


            	        switch (alt43) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:1750:10: ( ruleQualifiedName )
            	    	    {
            	    	    // InternalReqSpec.g:1750:10: ( ruleQualifiedName )
            	    	    // InternalReqSpec.g:1751:11: ruleQualifiedName
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      											if (current==null) {
            	    	      												current = createModelElement(grammarAccess.getDocGoalRule());
            	    	      											}
            	    	      										
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      											newCompositeNode(grammarAccess.getDocGoalAccess().getCategoryCategoryCrossReference_5_0_1_0());
            	    	      										
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_37);
            	    	    ruleQualifiedName();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      											afterParserOrEnumRuleCall();
            	    	      										
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt43 >= 1 ) break loop43;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(43, input);
            	                throw eee;
            	        }
            	        cnt43++;
            	    } while (true);


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDocGoalAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // InternalReqSpec.g:1771:4: ({...}? => ( ({...}? => ( (lv_description_12_0= ruleDescription ) ) ) ) )
            	    {
            	    // InternalReqSpec.g:1771:4: ({...}? => ( ({...}? => ( (lv_description_12_0= ruleDescription ) ) ) ) )
            	    // InternalReqSpec.g:1772:5: {...}? => ( ({...}? => ( (lv_description_12_0= ruleDescription ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 1) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocGoal", "getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 1)");
            	    }
            	    // InternalReqSpec.g:1772:104: ( ({...}? => ( (lv_description_12_0= ruleDescription ) ) ) )
            	    // InternalReqSpec.g:1773:6: ({...}? => ( (lv_description_12_0= ruleDescription ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 1);
            	    // InternalReqSpec.g:1776:9: ({...}? => ( (lv_description_12_0= ruleDescription ) ) )
            	    // InternalReqSpec.g:1776:10: {...}? => ( (lv_description_12_0= ruleDescription ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocGoal", "true");
            	    }
            	    // InternalReqSpec.g:1776:19: ( (lv_description_12_0= ruleDescription ) )
            	    // InternalReqSpec.g:1776:20: (lv_description_12_0= ruleDescription )
            	    {
            	    // InternalReqSpec.g:1776:20: (lv_description_12_0= ruleDescription )
            	    // InternalReqSpec.g:1777:10: lv_description_12_0= ruleDescription
            	    {
            	    if ( state.backtracking==0 ) {

            	      										newCompositeNode(grammarAccess.getDocGoalAccess().getDescriptionDescriptionParserRuleCall_5_1_0());
            	      									
            	    }
            	    pushFollow(FollowSets000.FOLLOW_36);
            	    lv_description_12_0=ruleDescription();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      										if (current==null) {
            	      											current = createModelElementForParent(grammarAccess.getDocGoalRule());
            	      										}
            	      										set(
            	      											current,
            	      											"description",
            	      											lv_description_12_0,
            	      											"org.osate.alisa.common.Common.Description");
            	      										afterParserOrEnumRuleCall();
            	      									
            	    }

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDocGoalAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 3 :
            	    // InternalReqSpec.g:1799:4: ({...}? => ( ({...}? => ( (lv_constants_13_0= ruleValDeclaration ) ) )+ ) )
            	    {
            	    // InternalReqSpec.g:1799:4: ({...}? => ( ({...}? => ( (lv_constants_13_0= ruleValDeclaration ) ) )+ ) )
            	    // InternalReqSpec.g:1800:5: {...}? => ( ({...}? => ( (lv_constants_13_0= ruleValDeclaration ) ) )+ )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 2) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocGoal", "getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 2)");
            	    }
            	    // InternalReqSpec.g:1800:104: ( ({...}? => ( (lv_constants_13_0= ruleValDeclaration ) ) )+ )
            	    // InternalReqSpec.g:1801:6: ({...}? => ( (lv_constants_13_0= ruleValDeclaration ) ) )+
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 2);
            	    // InternalReqSpec.g:1804:9: ({...}? => ( (lv_constants_13_0= ruleValDeclaration ) ) )+
            	    int cnt44=0;
            	    loop44:
            	    do {
            	        int alt44=2;
            	        int LA44_0 = input.LA(1);

            	        if ( (LA44_0==60) ) {
            	            int LA44_2 = input.LA(2);

            	            if ( ((true)) ) {
            	                alt44=1;
            	            }


            	        }


            	        switch (alt44) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:1804:10: {...}? => ( (lv_constants_13_0= ruleValDeclaration ) )
            	    	    {
            	    	    if ( !((true)) ) {
            	    	        if (state.backtracking>0) {state.failed=true; return current;}
            	    	        throw new FailedPredicateException(input, "ruleDocGoal", "true");
            	    	    }
            	    	    // InternalReqSpec.g:1804:19: ( (lv_constants_13_0= ruleValDeclaration ) )
            	    	    // InternalReqSpec.g:1804:20: (lv_constants_13_0= ruleValDeclaration )
            	    	    {
            	    	    // InternalReqSpec.g:1804:20: (lv_constants_13_0= ruleValDeclaration )
            	    	    // InternalReqSpec.g:1805:10: lv_constants_13_0= ruleValDeclaration
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      										newCompositeNode(grammarAccess.getDocGoalAccess().getConstantsValDeclarationParserRuleCall_5_2_0());
            	    	      									
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_36);
            	    	    lv_constants_13_0=ruleValDeclaration();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      										if (current==null) {
            	    	      											current = createModelElementForParent(grammarAccess.getDocGoalRule());
            	    	      										}
            	    	      										add(
            	    	      											current,
            	    	      											"constants",
            	    	      											lv_constants_13_0,
            	    	      											"org.osate.reqspec.ReqSpec.ValDeclaration");
            	    	      										afterParserOrEnumRuleCall();
            	    	      									
            	    	    }

            	    	    }


            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt44 >= 1 ) break loop44;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(44, input);
            	                throw eee;
            	        }
            	        cnt44++;
            	    } while (true);

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDocGoalAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 4 :
            	    // InternalReqSpec.g:1827:4: ({...}? => ( ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) ) ) )
            	    {
            	    // InternalReqSpec.g:1827:4: ({...}? => ( ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) ) ) )
            	    // InternalReqSpec.g:1828:5: {...}? => ( ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 3) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocGoal", "getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 3)");
            	    }
            	    // InternalReqSpec.g:1828:104: ( ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) ) )
            	    // InternalReqSpec.g:1829:6: ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 3);
            	    // InternalReqSpec.g:1832:9: ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) )
            	    // InternalReqSpec.g:1832:10: {...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocGoal", "true");
            	    }
            	    // InternalReqSpec.g:1832:19: ( (lv_whencondition_14_0= ruleWhenCondition ) )
            	    // InternalReqSpec.g:1832:20: (lv_whencondition_14_0= ruleWhenCondition )
            	    {
            	    // InternalReqSpec.g:1832:20: (lv_whencondition_14_0= ruleWhenCondition )
            	    // InternalReqSpec.g:1833:10: lv_whencondition_14_0= ruleWhenCondition
            	    {
            	    if ( state.backtracking==0 ) {

            	      										newCompositeNode(grammarAccess.getDocGoalAccess().getWhenconditionWhenConditionParserRuleCall_5_3_0());
            	      									
            	    }
            	    pushFollow(FollowSets000.FOLLOW_36);
            	    lv_whencondition_14_0=ruleWhenCondition();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      										if (current==null) {
            	      											current = createModelElementForParent(grammarAccess.getDocGoalRule());
            	      										}
            	      										set(
            	      											current,
            	      											"whencondition",
            	      											lv_whencondition_14_0,
            	      											"org.osate.reqspec.ReqSpec.WhenCondition");
            	      										afterParserOrEnumRuleCall();
            	      									
            	    }

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDocGoalAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 5 :
            	    // InternalReqSpec.g:1855:4: ({...}? => ( ({...}? => ( (lv_rationale_15_0= ruleRationale ) ) ) ) )
            	    {
            	    // InternalReqSpec.g:1855:4: ({...}? => ( ({...}? => ( (lv_rationale_15_0= ruleRationale ) ) ) ) )
            	    // InternalReqSpec.g:1856:5: {...}? => ( ({...}? => ( (lv_rationale_15_0= ruleRationale ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 4) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocGoal", "getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 4)");
            	    }
            	    // InternalReqSpec.g:1856:104: ( ({...}? => ( (lv_rationale_15_0= ruleRationale ) ) ) )
            	    // InternalReqSpec.g:1857:6: ({...}? => ( (lv_rationale_15_0= ruleRationale ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 4);
            	    // InternalReqSpec.g:1860:9: ({...}? => ( (lv_rationale_15_0= ruleRationale ) ) )
            	    // InternalReqSpec.g:1860:10: {...}? => ( (lv_rationale_15_0= ruleRationale ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocGoal", "true");
            	    }
            	    // InternalReqSpec.g:1860:19: ( (lv_rationale_15_0= ruleRationale ) )
            	    // InternalReqSpec.g:1860:20: (lv_rationale_15_0= ruleRationale )
            	    {
            	    // InternalReqSpec.g:1860:20: (lv_rationale_15_0= ruleRationale )
            	    // InternalReqSpec.g:1861:10: lv_rationale_15_0= ruleRationale
            	    {
            	    if ( state.backtracking==0 ) {

            	      										newCompositeNode(grammarAccess.getDocGoalAccess().getRationaleRationaleParserRuleCall_5_4_0());
            	      									
            	    }
            	    pushFollow(FollowSets000.FOLLOW_36);
            	    lv_rationale_15_0=ruleRationale();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      										if (current==null) {
            	      											current = createModelElementForParent(grammarAccess.getDocGoalRule());
            	      										}
            	      										set(
            	      											current,
            	      											"rationale",
            	      											lv_rationale_15_0,
            	      											"org.osate.alisa.common.Common.Rationale");
            	      										afterParserOrEnumRuleCall();
            	      									
            	    }

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDocGoalAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 6 :
            	    // InternalReqSpec.g:1883:4: ({...}? => ( ({...}? => ( (lv_changeUncertainty_16_0= ruleUncertainty ) ) ) ) )
            	    {
            	    // InternalReqSpec.g:1883:4: ({...}? => ( ({...}? => ( (lv_changeUncertainty_16_0= ruleUncertainty ) ) ) ) )
            	    // InternalReqSpec.g:1884:5: {...}? => ( ({...}? => ( (lv_changeUncertainty_16_0= ruleUncertainty ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 5) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocGoal", "getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 5)");
            	    }
            	    // InternalReqSpec.g:1884:104: ( ({...}? => ( (lv_changeUncertainty_16_0= ruleUncertainty ) ) ) )
            	    // InternalReqSpec.g:1885:6: ({...}? => ( (lv_changeUncertainty_16_0= ruleUncertainty ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 5);
            	    // InternalReqSpec.g:1888:9: ({...}? => ( (lv_changeUncertainty_16_0= ruleUncertainty ) ) )
            	    // InternalReqSpec.g:1888:10: {...}? => ( (lv_changeUncertainty_16_0= ruleUncertainty ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocGoal", "true");
            	    }
            	    // InternalReqSpec.g:1888:19: ( (lv_changeUncertainty_16_0= ruleUncertainty ) )
            	    // InternalReqSpec.g:1888:20: (lv_changeUncertainty_16_0= ruleUncertainty )
            	    {
            	    // InternalReqSpec.g:1888:20: (lv_changeUncertainty_16_0= ruleUncertainty )
            	    // InternalReqSpec.g:1889:10: lv_changeUncertainty_16_0= ruleUncertainty
            	    {
            	    if ( state.backtracking==0 ) {

            	      										newCompositeNode(grammarAccess.getDocGoalAccess().getChangeUncertaintyUncertaintyParserRuleCall_5_5_0());
            	      									
            	    }
            	    pushFollow(FollowSets000.FOLLOW_36);
            	    lv_changeUncertainty_16_0=ruleUncertainty();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      										if (current==null) {
            	      											current = createModelElementForParent(grammarAccess.getDocGoalRule());
            	      										}
            	      										set(
            	      											current,
            	      											"changeUncertainty",
            	      											lv_changeUncertainty_16_0,
            	      											"org.osate.alisa.common.Common.Uncertainty");
            	      										afterParserOrEnumRuleCall();
            	      									
            	    }

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDocGoalAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 7 :
            	    // InternalReqSpec.g:1911:4: ({...}? => ( ({...}? => (otherlv_17= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    {
            	    // InternalReqSpec.g:1911:4: ({...}? => ( ({...}? => (otherlv_17= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    // InternalReqSpec.g:1912:5: {...}? => ( ({...}? => (otherlv_17= 'refines' ( ( ruleQualifiedName ) )+ ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 6) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocGoal", "getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 6)");
            	    }
            	    // InternalReqSpec.g:1912:104: ( ({...}? => (otherlv_17= 'refines' ( ( ruleQualifiedName ) )+ ) ) )
            	    // InternalReqSpec.g:1913:6: ({...}? => (otherlv_17= 'refines' ( ( ruleQualifiedName ) )+ ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 6);
            	    // InternalReqSpec.g:1916:9: ({...}? => (otherlv_17= 'refines' ( ( ruleQualifiedName ) )+ ) )
            	    // InternalReqSpec.g:1916:10: {...}? => (otherlv_17= 'refines' ( ( ruleQualifiedName ) )+ )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocGoal", "true");
            	    }
            	    // InternalReqSpec.g:1916:19: (otherlv_17= 'refines' ( ( ruleQualifiedName ) )+ )
            	    // InternalReqSpec.g:1916:20: otherlv_17= 'refines' ( ( ruleQualifiedName ) )+
            	    {
            	    otherlv_17=(Token)match(input,34,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_17, grammarAccess.getDocGoalAccess().getRefinesKeyword_5_6_0());
            	      								
            	    }
            	    // InternalReqSpec.g:1920:9: ( ( ruleQualifiedName ) )+
            	    int cnt45=0;
            	    loop45:
            	    do {
            	        int alt45=2;
            	        int LA45_0 = input.LA(1);

            	        if ( (LA45_0==RULE_ID) ) {
            	            alt45=1;
            	        }


            	        switch (alt45) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:1921:10: ( ruleQualifiedName )
            	    	    {
            	    	    // InternalReqSpec.g:1921:10: ( ruleQualifiedName )
            	    	    // InternalReqSpec.g:1922:11: ruleQualifiedName
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      											if (current==null) {
            	    	      												current = createModelElement(grammarAccess.getDocGoalRule());
            	    	      											}
            	    	      										
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      											newCompositeNode(grammarAccess.getDocGoalAccess().getRefinesReferenceGoalCrossReference_5_6_1_0());
            	    	      										
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_37);
            	    	    ruleQualifiedName();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      											afterParserOrEnumRuleCall();
            	    	      										
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt45 >= 1 ) break loop45;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(45, input);
            	                throw eee;
            	        }
            	        cnt45++;
            	    } while (true);


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDocGoalAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 8 :
            	    // InternalReqSpec.g:1942:4: ({...}? => ( ({...}? => (otherlv_19= 'conflicts' otherlv_20= 'with' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    {
            	    // InternalReqSpec.g:1942:4: ({...}? => ( ({...}? => (otherlv_19= 'conflicts' otherlv_20= 'with' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    // InternalReqSpec.g:1943:5: {...}? => ( ({...}? => (otherlv_19= 'conflicts' otherlv_20= 'with' ( ( ruleQualifiedName ) )+ ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 7) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocGoal", "getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 7)");
            	    }
            	    // InternalReqSpec.g:1943:104: ( ({...}? => (otherlv_19= 'conflicts' otherlv_20= 'with' ( ( ruleQualifiedName ) )+ ) ) )
            	    // InternalReqSpec.g:1944:6: ({...}? => (otherlv_19= 'conflicts' otherlv_20= 'with' ( ( ruleQualifiedName ) )+ ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 7);
            	    // InternalReqSpec.g:1947:9: ({...}? => (otherlv_19= 'conflicts' otherlv_20= 'with' ( ( ruleQualifiedName ) )+ ) )
            	    // InternalReqSpec.g:1947:10: {...}? => (otherlv_19= 'conflicts' otherlv_20= 'with' ( ( ruleQualifiedName ) )+ )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocGoal", "true");
            	    }
            	    // InternalReqSpec.g:1947:19: (otherlv_19= 'conflicts' otherlv_20= 'with' ( ( ruleQualifiedName ) )+ )
            	    // InternalReqSpec.g:1947:20: otherlv_19= 'conflicts' otherlv_20= 'with' ( ( ruleQualifiedName ) )+
            	    {
            	    otherlv_19=(Token)match(input,35,FollowSets000.FOLLOW_38); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_19, grammarAccess.getDocGoalAccess().getConflictsKeyword_5_7_0());
            	      								
            	    }
            	    otherlv_20=(Token)match(input,36,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_20, grammarAccess.getDocGoalAccess().getWithKeyword_5_7_1());
            	      								
            	    }
            	    // InternalReqSpec.g:1955:9: ( ( ruleQualifiedName ) )+
            	    int cnt46=0;
            	    loop46:
            	    do {
            	        int alt46=2;
            	        int LA46_0 = input.LA(1);

            	        if ( (LA46_0==RULE_ID) ) {
            	            alt46=1;
            	        }


            	        switch (alt46) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:1956:10: ( ruleQualifiedName )
            	    	    {
            	    	    // InternalReqSpec.g:1956:10: ( ruleQualifiedName )
            	    	    // InternalReqSpec.g:1957:11: ruleQualifiedName
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      											if (current==null) {
            	    	      												current = createModelElement(grammarAccess.getDocGoalRule());
            	    	      											}
            	    	      										
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      											newCompositeNode(grammarAccess.getDocGoalAccess().getConflictsReferenceGoalCrossReference_5_7_2_0());
            	    	      										
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_37);
            	    	    ruleQualifiedName();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      											afterParserOrEnumRuleCall();
            	    	      										
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt46 >= 1 ) break loop46;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(46, input);
            	                throw eee;
            	        }
            	        cnt46++;
            	    } while (true);


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDocGoalAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 9 :
            	    // InternalReqSpec.g:1977:4: ({...}? => ( ({...}? => (otherlv_22= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    {
            	    // InternalReqSpec.g:1977:4: ({...}? => ( ({...}? => (otherlv_22= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    // InternalReqSpec.g:1978:5: {...}? => ( ({...}? => (otherlv_22= 'evolves' ( ( ruleQualifiedName ) )+ ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 8) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocGoal", "getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 8)");
            	    }
            	    // InternalReqSpec.g:1978:104: ( ({...}? => (otherlv_22= 'evolves' ( ( ruleQualifiedName ) )+ ) ) )
            	    // InternalReqSpec.g:1979:6: ({...}? => (otherlv_22= 'evolves' ( ( ruleQualifiedName ) )+ ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 8);
            	    // InternalReqSpec.g:1982:9: ({...}? => (otherlv_22= 'evolves' ( ( ruleQualifiedName ) )+ ) )
            	    // InternalReqSpec.g:1982:10: {...}? => (otherlv_22= 'evolves' ( ( ruleQualifiedName ) )+ )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocGoal", "true");
            	    }
            	    // InternalReqSpec.g:1982:19: (otherlv_22= 'evolves' ( ( ruleQualifiedName ) )+ )
            	    // InternalReqSpec.g:1982:20: otherlv_22= 'evolves' ( ( ruleQualifiedName ) )+
            	    {
            	    otherlv_22=(Token)match(input,37,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_22, grammarAccess.getDocGoalAccess().getEvolvesKeyword_5_8_0());
            	      								
            	    }
            	    // InternalReqSpec.g:1986:9: ( ( ruleQualifiedName ) )+
            	    int cnt47=0;
            	    loop47:
            	    do {
            	        int alt47=2;
            	        int LA47_0 = input.LA(1);

            	        if ( (LA47_0==RULE_ID) ) {
            	            alt47=1;
            	        }


            	        switch (alt47) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:1987:10: ( ruleQualifiedName )
            	    	    {
            	    	    // InternalReqSpec.g:1987:10: ( ruleQualifiedName )
            	    	    // InternalReqSpec.g:1988:11: ruleQualifiedName
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      											if (current==null) {
            	    	      												current = createModelElement(grammarAccess.getDocGoalRule());
            	    	      											}
            	    	      										
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      											newCompositeNode(grammarAccess.getDocGoalAccess().getEvolvesReferenceRequirementCrossReference_5_8_1_0());
            	    	      										
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_37);
            	    	    ruleQualifiedName();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      											afterParserOrEnumRuleCall();
            	    	      										
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt47 >= 1 ) break loop47;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(47, input);
            	                throw eee;
            	        }
            	        cnt47++;
            	    } while (true);


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDocGoalAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 10 :
            	    // InternalReqSpec.g:2008:4: ({...}? => ( ({...}? => ( ( (lv_dropped_24_0= 'dropped' ) ) ( (lv_dropRationale_25_0= RULE_STRING ) )? ) ) ) )
            	    {
            	    // InternalReqSpec.g:2008:4: ({...}? => ( ({...}? => ( ( (lv_dropped_24_0= 'dropped' ) ) ( (lv_dropRationale_25_0= RULE_STRING ) )? ) ) ) )
            	    // InternalReqSpec.g:2009:5: {...}? => ( ({...}? => ( ( (lv_dropped_24_0= 'dropped' ) ) ( (lv_dropRationale_25_0= RULE_STRING ) )? ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 9) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocGoal", "getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 9)");
            	    }
            	    // InternalReqSpec.g:2009:104: ( ({...}? => ( ( (lv_dropped_24_0= 'dropped' ) ) ( (lv_dropRationale_25_0= RULE_STRING ) )? ) ) )
            	    // InternalReqSpec.g:2010:6: ({...}? => ( ( (lv_dropped_24_0= 'dropped' ) ) ( (lv_dropRationale_25_0= RULE_STRING ) )? ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 9);
            	    // InternalReqSpec.g:2013:9: ({...}? => ( ( (lv_dropped_24_0= 'dropped' ) ) ( (lv_dropRationale_25_0= RULE_STRING ) )? ) )
            	    // InternalReqSpec.g:2013:10: {...}? => ( ( (lv_dropped_24_0= 'dropped' ) ) ( (lv_dropRationale_25_0= RULE_STRING ) )? )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocGoal", "true");
            	    }
            	    // InternalReqSpec.g:2013:19: ( ( (lv_dropped_24_0= 'dropped' ) ) ( (lv_dropRationale_25_0= RULE_STRING ) )? )
            	    // InternalReqSpec.g:2013:20: ( (lv_dropped_24_0= 'dropped' ) ) ( (lv_dropRationale_25_0= RULE_STRING ) )?
            	    {
            	    // InternalReqSpec.g:2013:20: ( (lv_dropped_24_0= 'dropped' ) )
            	    // InternalReqSpec.g:2014:10: (lv_dropped_24_0= 'dropped' )
            	    {
            	    // InternalReqSpec.g:2014:10: (lv_dropped_24_0= 'dropped' )
            	    // InternalReqSpec.g:2015:11: lv_dropped_24_0= 'dropped'
            	    {
            	    lv_dropped_24_0=(Token)match(input,38,FollowSets000.FOLLOW_39); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      											newLeafNode(lv_dropped_24_0, grammarAccess.getDocGoalAccess().getDroppedDroppedKeyword_5_9_0_0());
            	      										
            	    }
            	    if ( state.backtracking==0 ) {

            	      											if (current==null) {
            	      												current = createModelElement(grammarAccess.getDocGoalRule());
            	      											}
            	      											setWithLastConsumed(current, "dropped", true, "dropped");
            	      										
            	    }

            	    }


            	    }

            	    // InternalReqSpec.g:2027:9: ( (lv_dropRationale_25_0= RULE_STRING ) )?
            	    int alt48=2;
            	    int LA48_0 = input.LA(1);

            	    if ( (LA48_0==RULE_STRING) ) {
            	        alt48=1;
            	    }
            	    switch (alt48) {
            	        case 1 :
            	            // InternalReqSpec.g:2028:10: (lv_dropRationale_25_0= RULE_STRING )
            	            {
            	            // InternalReqSpec.g:2028:10: (lv_dropRationale_25_0= RULE_STRING )
            	            // InternalReqSpec.g:2029:11: lv_dropRationale_25_0= RULE_STRING
            	            {
            	            lv_dropRationale_25_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_36); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              											newLeafNode(lv_dropRationale_25_0, grammarAccess.getDocGoalAccess().getDropRationaleSTRINGTerminalRuleCall_5_9_1_0());
            	              										
            	            }
            	            if ( state.backtracking==0 ) {

            	              											if (current==null) {
            	              												current = createModelElement(grammarAccess.getDocGoalRule());
            	              											}
            	              											setWithLastConsumed(
            	              												current,
            	              												"dropRationale",
            	              												lv_dropRationale_25_0,
            	              												"org.eclipse.xtext.common.Terminals.STRING");
            	              										
            	            }

            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDocGoalAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 11 :
            	    // InternalReqSpec.g:2051:4: ({...}? => ( ({...}? => (otherlv_26= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    {
            	    // InternalReqSpec.g:2051:4: ({...}? => ( ({...}? => (otherlv_26= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    // InternalReqSpec.g:2052:5: {...}? => ( ({...}? => (otherlv_26= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 10) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocGoal", "getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 10)");
            	    }
            	    // InternalReqSpec.g:2052:105: ( ({...}? => (otherlv_26= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) )
            	    // InternalReqSpec.g:2053:6: ({...}? => (otherlv_26= 'stakeholder' ( ( ruleQualifiedName ) )+ ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 10);
            	    // InternalReqSpec.g:2056:9: ({...}? => (otherlv_26= 'stakeholder' ( ( ruleQualifiedName ) )+ ) )
            	    // InternalReqSpec.g:2056:10: {...}? => (otherlv_26= 'stakeholder' ( ( ruleQualifiedName ) )+ )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocGoal", "true");
            	    }
            	    // InternalReqSpec.g:2056:19: (otherlv_26= 'stakeholder' ( ( ruleQualifiedName ) )+ )
            	    // InternalReqSpec.g:2056:20: otherlv_26= 'stakeholder' ( ( ruleQualifiedName ) )+
            	    {
            	    otherlv_26=(Token)match(input,20,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_26, grammarAccess.getDocGoalAccess().getStakeholderKeyword_5_10_0());
            	      								
            	    }
            	    // InternalReqSpec.g:2060:9: ( ( ruleQualifiedName ) )+
            	    int cnt49=0;
            	    loop49:
            	    do {
            	        int alt49=2;
            	        int LA49_0 = input.LA(1);

            	        if ( (LA49_0==RULE_ID) ) {
            	            alt49=1;
            	        }


            	        switch (alt49) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:2061:10: ( ruleQualifiedName )
            	    	    {
            	    	    // InternalReqSpec.g:2061:10: ( ruleQualifiedName )
            	    	    // InternalReqSpec.g:2062:11: ruleQualifiedName
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      											if (current==null) {
            	    	      												current = createModelElement(grammarAccess.getDocGoalRule());
            	    	      											}
            	    	      										
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      											newCompositeNode(grammarAccess.getDocGoalAccess().getStakeholderReferenceStakeholderCrossReference_5_10_1_0());
            	    	      										
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_37);
            	    	    ruleQualifiedName();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      											afterParserOrEnumRuleCall();
            	    	      										
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt49 >= 1 ) break loop49;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(49, input);
            	                throw eee;
            	        }
            	        cnt49++;
            	    } while (true);


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDocGoalAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 12 :
            	    // InternalReqSpec.g:2082:4: ({...}? => ( ({...}? => (otherlv_28= 'see' otherlv_29= 'document' ( (lv_docReference_30_0= ruleExternalDocument ) )+ ) ) ) )
            	    {
            	    // InternalReqSpec.g:2082:4: ({...}? => ( ({...}? => (otherlv_28= 'see' otherlv_29= 'document' ( (lv_docReference_30_0= ruleExternalDocument ) )+ ) ) ) )
            	    // InternalReqSpec.g:2083:5: {...}? => ( ({...}? => (otherlv_28= 'see' otherlv_29= 'document' ( (lv_docReference_30_0= ruleExternalDocument ) )+ ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 11) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocGoal", "getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 11)");
            	    }
            	    // InternalReqSpec.g:2083:105: ( ({...}? => (otherlv_28= 'see' otherlv_29= 'document' ( (lv_docReference_30_0= ruleExternalDocument ) )+ ) ) )
            	    // InternalReqSpec.g:2084:6: ({...}? => (otherlv_28= 'see' otherlv_29= 'document' ( (lv_docReference_30_0= ruleExternalDocument ) )+ ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 11);
            	    // InternalReqSpec.g:2087:9: ({...}? => (otherlv_28= 'see' otherlv_29= 'document' ( (lv_docReference_30_0= ruleExternalDocument ) )+ ) )
            	    // InternalReqSpec.g:2087:10: {...}? => (otherlv_28= 'see' otherlv_29= 'document' ( (lv_docReference_30_0= ruleExternalDocument ) )+ )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocGoal", "true");
            	    }
            	    // InternalReqSpec.g:2087:19: (otherlv_28= 'see' otherlv_29= 'document' ( (lv_docReference_30_0= ruleExternalDocument ) )+ )
            	    // InternalReqSpec.g:2087:20: otherlv_28= 'see' otherlv_29= 'document' ( (lv_docReference_30_0= ruleExternalDocument ) )+
            	    {
            	    otherlv_28=(Token)match(input,25,FollowSets000.FOLLOW_17); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_28, grammarAccess.getDocGoalAccess().getSeeKeyword_5_11_0());
            	      								
            	    }
            	    otherlv_29=(Token)match(input,26,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_29, grammarAccess.getDocGoalAccess().getDocumentKeyword_5_11_1());
            	      								
            	    }
            	    // InternalReqSpec.g:2095:9: ( (lv_docReference_30_0= ruleExternalDocument ) )+
            	    int cnt50=0;
            	    loop50:
            	    do {
            	        int alt50=2;
            	        int LA50_0 = input.LA(1);

            	        if ( (LA50_0==RULE_ID) ) {
            	            alt50=1;
            	        }


            	        switch (alt50) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:2096:10: (lv_docReference_30_0= ruleExternalDocument )
            	    	    {
            	    	    // InternalReqSpec.g:2096:10: (lv_docReference_30_0= ruleExternalDocument )
            	    	    // InternalReqSpec.g:2097:11: lv_docReference_30_0= ruleExternalDocument
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      											newCompositeNode(grammarAccess.getDocGoalAccess().getDocReferenceExternalDocumentParserRuleCall_5_11_2_0());
            	    	      										
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_37);
            	    	    lv_docReference_30_0=ruleExternalDocument();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      											if (current==null) {
            	    	      												current = createModelElementForParent(grammarAccess.getDocGoalRule());
            	    	      											}
            	    	      											add(
            	    	      												current,
            	    	      												"docReference",
            	    	      												lv_docReference_30_0,
            	    	      												"org.osate.reqspec.ReqSpec.ExternalDocument");
            	    	      											afterParserOrEnumRuleCall();
            	    	      										
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt50 >= 1 ) break loop50;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(50, input);
            	                throw eee;
            	        }
            	        cnt50++;
            	    } while (true);


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDocGoalAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 13 :
            	    // InternalReqSpec.g:2120:4: ({...}? => ( ({...}? => (otherlv_31= 'issues' ( (lv_issues_32_0= RULE_STRING ) )+ ) ) ) )
            	    {
            	    // InternalReqSpec.g:2120:4: ({...}? => ( ({...}? => (otherlv_31= 'issues' ( (lv_issues_32_0= RULE_STRING ) )+ ) ) ) )
            	    // InternalReqSpec.g:2121:5: {...}? => ( ({...}? => (otherlv_31= 'issues' ( (lv_issues_32_0= RULE_STRING ) )+ ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 12) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocGoal", "getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 12)");
            	    }
            	    // InternalReqSpec.g:2121:105: ( ({...}? => (otherlv_31= 'issues' ( (lv_issues_32_0= RULE_STRING ) )+ ) ) )
            	    // InternalReqSpec.g:2122:6: ({...}? => (otherlv_31= 'issues' ( (lv_issues_32_0= RULE_STRING ) )+ ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 12);
            	    // InternalReqSpec.g:2125:9: ({...}? => (otherlv_31= 'issues' ( (lv_issues_32_0= RULE_STRING ) )+ ) )
            	    // InternalReqSpec.g:2125:10: {...}? => (otherlv_31= 'issues' ( (lv_issues_32_0= RULE_STRING ) )+ )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocGoal", "true");
            	    }
            	    // InternalReqSpec.g:2125:19: (otherlv_31= 'issues' ( (lv_issues_32_0= RULE_STRING ) )+ )
            	    // InternalReqSpec.g:2125:20: otherlv_31= 'issues' ( (lv_issues_32_0= RULE_STRING ) )+
            	    {
            	    otherlv_31=(Token)match(input,27,FollowSets000.FOLLOW_9); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_31, grammarAccess.getDocGoalAccess().getIssuesKeyword_5_12_0());
            	      								
            	    }
            	    // InternalReqSpec.g:2129:9: ( (lv_issues_32_0= RULE_STRING ) )+
            	    int cnt51=0;
            	    loop51:
            	    do {
            	        int alt51=2;
            	        int LA51_0 = input.LA(1);

            	        if ( (LA51_0==RULE_STRING) ) {
            	            alt51=1;
            	        }


            	        switch (alt51) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:2130:10: (lv_issues_32_0= RULE_STRING )
            	    	    {
            	    	    // InternalReqSpec.g:2130:10: (lv_issues_32_0= RULE_STRING )
            	    	    // InternalReqSpec.g:2131:11: lv_issues_32_0= RULE_STRING
            	    	    {
            	    	    lv_issues_32_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_39); if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      											newLeafNode(lv_issues_32_0, grammarAccess.getDocGoalAccess().getIssuesSTRINGTerminalRuleCall_5_12_1_0());
            	    	      										
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      											if (current==null) {
            	    	      												current = createModelElement(grammarAccess.getDocGoalRule());
            	    	      											}
            	    	      											addWithLastConsumed(
            	    	      												current,
            	    	      												"issues",
            	    	      												lv_issues_32_0,
            	    	      												"org.eclipse.xtext.common.Terminals.STRING");
            	    	      										
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt51 >= 1 ) break loop51;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(51, input);
            	                throw eee;
            	        }
            	        cnt51++;
            	    } while (true);


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDocGoalAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop52;
                }
            } while (true);


            }


            }

            getUnorderedGroupHelper().leave(grammarAccess.getDocGoalAccess().getUnorderedGroup_5());

            }

            otherlv_33=(Token)match(input,19,FollowSets000.FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_33, grammarAccess.getDocGoalAccess().getRightSquareBracketKeyword_6());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDocGoal"


    // $ANTLR start "entryRuleGoal"
    // InternalReqSpec.g:2168:1: entryRuleGoal returns [EObject current=null] : iv_ruleGoal= ruleGoal EOF ;
    public final EObject entryRuleGoal() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleGoal = null;


        try {
            // InternalReqSpec.g:2168:45: (iv_ruleGoal= ruleGoal EOF )
            // InternalReqSpec.g:2169:2: iv_ruleGoal= ruleGoal EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getGoalRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleGoal=ruleGoal();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleGoal; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleGoal"


    // $ANTLR start "ruleGoal"
    // InternalReqSpec.g:2175:1: ruleGoal returns [EObject current=null] : (otherlv_0= 'goal' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? (otherlv_4= 'for' ( (otherlv_5= RULE_ID ) ) )? otherlv_6= '[' ( ( ( ( ({...}? => ( ({...}? => (otherlv_8= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_10_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_11_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_12_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_13_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_14_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_15= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_17= 'conflicts' otherlv_18= 'with' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_20= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_22_0= 'dropped' ) ) ( (lv_dropRationale_23_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_24= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'see' otherlv_27= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'see' otherlv_30= 'document' ( (lv_docReference_31_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'issues' ( (lv_issues_33_0= RULE_STRING ) )+ ) ) ) ) )* ) ) ) otherlv_34= ']' ) ;
    public final EObject ruleGoal() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token lv_title_3_0=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        Token otherlv_8=null;
        Token otherlv_15=null;
        Token otherlv_17=null;
        Token otherlv_18=null;
        Token otherlv_20=null;
        Token lv_dropped_22_0=null;
        Token lv_dropRationale_23_0=null;
        Token otherlv_24=null;
        Token otherlv_26=null;
        Token otherlv_27=null;
        Token otherlv_29=null;
        Token otherlv_30=null;
        Token otherlv_32=null;
        Token lv_issues_33_0=null;
        Token otherlv_34=null;
        EObject lv_description_10_0 = null;

        EObject lv_constants_11_0 = null;

        EObject lv_whencondition_12_0 = null;

        EObject lv_rationale_13_0 = null;

        EObject lv_changeUncertainty_14_0 = null;

        EObject lv_docReference_31_0 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:2181:2: ( (otherlv_0= 'goal' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? (otherlv_4= 'for' ( (otherlv_5= RULE_ID ) ) )? otherlv_6= '[' ( ( ( ( ({...}? => ( ({...}? => (otherlv_8= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_10_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_11_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_12_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_13_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_14_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_15= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_17= 'conflicts' otherlv_18= 'with' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_20= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_22_0= 'dropped' ) ) ( (lv_dropRationale_23_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_24= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'see' otherlv_27= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'see' otherlv_30= 'document' ( (lv_docReference_31_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'issues' ( (lv_issues_33_0= RULE_STRING ) )+ ) ) ) ) )* ) ) ) otherlv_34= ']' ) )
            // InternalReqSpec.g:2182:2: (otherlv_0= 'goal' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? (otherlv_4= 'for' ( (otherlv_5= RULE_ID ) ) )? otherlv_6= '[' ( ( ( ( ({...}? => ( ({...}? => (otherlv_8= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_10_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_11_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_12_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_13_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_14_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_15= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_17= 'conflicts' otherlv_18= 'with' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_20= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_22_0= 'dropped' ) ) ( (lv_dropRationale_23_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_24= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'see' otherlv_27= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'see' otherlv_30= 'document' ( (lv_docReference_31_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'issues' ( (lv_issues_33_0= RULE_STRING ) )+ ) ) ) ) )* ) ) ) otherlv_34= ']' )
            {
            // InternalReqSpec.g:2182:2: (otherlv_0= 'goal' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? (otherlv_4= 'for' ( (otherlv_5= RULE_ID ) ) )? otherlv_6= '[' ( ( ( ( ({...}? => ( ({...}? => (otherlv_8= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_10_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_11_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_12_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_13_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_14_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_15= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_17= 'conflicts' otherlv_18= 'with' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_20= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_22_0= 'dropped' ) ) ( (lv_dropRationale_23_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_24= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'see' otherlv_27= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'see' otherlv_30= 'document' ( (lv_docReference_31_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'issues' ( (lv_issues_33_0= RULE_STRING ) )+ ) ) ) ) )* ) ) ) otherlv_34= ']' )
            // InternalReqSpec.g:2183:3: otherlv_0= 'goal' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? (otherlv_4= 'for' ( (otherlv_5= RULE_ID ) ) )? otherlv_6= '[' ( ( ( ( ({...}? => ( ({...}? => (otherlv_8= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_10_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_11_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_12_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_13_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_14_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_15= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_17= 'conflicts' otherlv_18= 'with' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_20= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_22_0= 'dropped' ) ) ( (lv_dropRationale_23_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_24= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'see' otherlv_27= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'see' otherlv_30= 'document' ( (lv_docReference_31_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'issues' ( (lv_issues_33_0= RULE_STRING ) )+ ) ) ) ) )* ) ) ) otherlv_34= ']'
            {
            otherlv_0=(Token)match(input,32,FollowSets000.FOLLOW_4); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getGoalAccess().getGoalKeyword_0());
              		
            }
            // InternalReqSpec.g:2187:3: ( (lv_name_1_0= RULE_ID ) )
            // InternalReqSpec.g:2188:4: (lv_name_1_0= RULE_ID )
            {
            // InternalReqSpec.g:2188:4: (lv_name_1_0= RULE_ID )
            // InternalReqSpec.g:2189:5: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_34); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_1_0, grammarAccess.getGoalAccess().getNameIDTerminalRuleCall_1_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getGoalRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_1_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalReqSpec.g:2205:3: (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )?
            int alt53=2;
            int LA53_0 = input.LA(1);

            if ( (LA53_0==22) ) {
                alt53=1;
            }
            switch (alt53) {
                case 1 :
                    // InternalReqSpec.g:2206:4: otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) )
                    {
                    otherlv_2=(Token)match(input,22,FollowSets000.FOLLOW_9); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_2, grammarAccess.getGoalAccess().getColonKeyword_2_0());
                      			
                    }
                    // InternalReqSpec.g:2210:4: ( (lv_title_3_0= RULE_STRING ) )
                    // InternalReqSpec.g:2211:5: (lv_title_3_0= RULE_STRING )
                    {
                    // InternalReqSpec.g:2211:5: (lv_title_3_0= RULE_STRING )
                    // InternalReqSpec.g:2212:6: lv_title_3_0= RULE_STRING
                    {
                    lv_title_3_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_35); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_title_3_0, grammarAccess.getGoalAccess().getTitleSTRINGTerminalRuleCall_2_1_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getGoalRule());
                      						}
                      						setWithLastConsumed(
                      							current,
                      							"title",
                      							lv_title_3_0,
                      							"org.eclipse.xtext.common.Terminals.STRING");
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            // InternalReqSpec.g:2229:3: (otherlv_4= 'for' ( (otherlv_5= RULE_ID ) ) )?
            int alt54=2;
            int LA54_0 = input.LA(1);

            if ( (LA54_0==23) ) {
                alt54=1;
            }
            switch (alt54) {
                case 1 :
                    // InternalReqSpec.g:2230:4: otherlv_4= 'for' ( (otherlv_5= RULE_ID ) )
                    {
                    otherlv_4=(Token)match(input,23,FollowSets000.FOLLOW_4); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_4, grammarAccess.getGoalAccess().getForKeyword_3_0());
                      			
                    }
                    // InternalReqSpec.g:2234:4: ( (otherlv_5= RULE_ID ) )
                    // InternalReqSpec.g:2235:5: (otherlv_5= RULE_ID )
                    {
                    // InternalReqSpec.g:2235:5: (otherlv_5= RULE_ID )
                    // InternalReqSpec.g:2236:6: otherlv_5= RULE_ID
                    {
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getGoalRule());
                      						}
                      					
                    }
                    otherlv_5=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_5); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(otherlv_5, grammarAccess.getGoalAccess().getTargetElementNamedElementCrossReference_3_1_0());
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            otherlv_6=(Token)match(input,18,FollowSets000.FOLLOW_36); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_6, grammarAccess.getGoalAccess().getLeftSquareBracketKeyword_4());
              		
            }
            // InternalReqSpec.g:2252:3: ( ( ( ( ({...}? => ( ({...}? => (otherlv_8= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_10_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_11_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_12_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_13_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_14_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_15= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_17= 'conflicts' otherlv_18= 'with' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_20= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_22_0= 'dropped' ) ) ( (lv_dropRationale_23_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_24= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'see' otherlv_27= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'see' otherlv_30= 'document' ( (lv_docReference_31_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'issues' ( (lv_issues_33_0= RULE_STRING ) )+ ) ) ) ) )* ) ) )
            // InternalReqSpec.g:2253:4: ( ( ( ({...}? => ( ({...}? => (otherlv_8= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_10_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_11_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_12_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_13_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_14_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_15= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_17= 'conflicts' otherlv_18= 'with' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_20= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_22_0= 'dropped' ) ) ( (lv_dropRationale_23_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_24= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'see' otherlv_27= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'see' otherlv_30= 'document' ( (lv_docReference_31_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'issues' ( (lv_issues_33_0= RULE_STRING ) )+ ) ) ) ) )* ) )
            {
            // InternalReqSpec.g:2253:4: ( ( ( ({...}? => ( ({...}? => (otherlv_8= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_10_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_11_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_12_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_13_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_14_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_15= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_17= 'conflicts' otherlv_18= 'with' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_20= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_22_0= 'dropped' ) ) ( (lv_dropRationale_23_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_24= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'see' otherlv_27= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'see' otherlv_30= 'document' ( (lv_docReference_31_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'issues' ( (lv_issues_33_0= RULE_STRING ) )+ ) ) ) ) )* ) )
            // InternalReqSpec.g:2254:5: ( ( ({...}? => ( ({...}? => (otherlv_8= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_10_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_11_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_12_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_13_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_14_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_15= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_17= 'conflicts' otherlv_18= 'with' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_20= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_22_0= 'dropped' ) ) ( (lv_dropRationale_23_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_24= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'see' otherlv_27= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'see' otherlv_30= 'document' ( (lv_docReference_31_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'issues' ( (lv_issues_33_0= RULE_STRING ) )+ ) ) ) ) )* )
            {
            getUnorderedGroupHelper().enter(grammarAccess.getGoalAccess().getUnorderedGroup_5());
            // InternalReqSpec.g:2257:5: ( ( ({...}? => ( ({...}? => (otherlv_8= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_10_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_11_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_12_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_13_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_14_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_15= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_17= 'conflicts' otherlv_18= 'with' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_20= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_22_0= 'dropped' ) ) ( (lv_dropRationale_23_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_24= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'see' otherlv_27= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'see' otherlv_30= 'document' ( (lv_docReference_31_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'issues' ( (lv_issues_33_0= RULE_STRING ) )+ ) ) ) ) )* )
            // InternalReqSpec.g:2258:6: ( ({...}? => ( ({...}? => (otherlv_8= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_10_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_11_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_12_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_13_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_14_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_15= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_17= 'conflicts' otherlv_18= 'with' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_20= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_22_0= 'dropped' ) ) ( (lv_dropRationale_23_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_24= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'see' otherlv_27= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'see' otherlv_30= 'document' ( (lv_docReference_31_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'issues' ( (lv_issues_33_0= RULE_STRING ) )+ ) ) ) ) )*
            {
            // InternalReqSpec.g:2258:6: ( ({...}? => ( ({...}? => (otherlv_8= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_10_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_11_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_12_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_13_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_14_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_15= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_17= 'conflicts' otherlv_18= 'with' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_20= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_22_0= 'dropped' ) ) ( (lv_dropRationale_23_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_24= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'see' otherlv_27= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'see' otherlv_30= 'document' ( (lv_docReference_31_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'issues' ( (lv_issues_33_0= RULE_STRING ) )+ ) ) ) ) )*
            loop65:
            do {
                int alt65=15;
                alt65 = dfa65.predict(input);
                switch (alt65) {
            	case 1 :
            	    // InternalReqSpec.g:2259:4: ({...}? => ( ({...}? => (otherlv_8= 'category' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    {
            	    // InternalReqSpec.g:2259:4: ({...}? => ( ({...}? => (otherlv_8= 'category' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    // InternalReqSpec.g:2260:5: {...}? => ( ({...}? => (otherlv_8= 'category' ( ( ruleQualifiedName ) )+ ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 0) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGoal", "getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 0)");
            	    }
            	    // InternalReqSpec.g:2260:101: ( ({...}? => (otherlv_8= 'category' ( ( ruleQualifiedName ) )+ ) ) )
            	    // InternalReqSpec.g:2261:6: ({...}? => (otherlv_8= 'category' ( ( ruleQualifiedName ) )+ ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 0);
            	    // InternalReqSpec.g:2264:9: ({...}? => (otherlv_8= 'category' ( ( ruleQualifiedName ) )+ ) )
            	    // InternalReqSpec.g:2264:10: {...}? => (otherlv_8= 'category' ( ( ruleQualifiedName ) )+ )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGoal", "true");
            	    }
            	    // InternalReqSpec.g:2264:19: (otherlv_8= 'category' ( ( ruleQualifiedName ) )+ )
            	    // InternalReqSpec.g:2264:20: otherlv_8= 'category' ( ( ruleQualifiedName ) )+
            	    {
            	    otherlv_8=(Token)match(input,33,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_8, grammarAccess.getGoalAccess().getCategoryKeyword_5_0_0());
            	      								
            	    }
            	    // InternalReqSpec.g:2268:9: ( ( ruleQualifiedName ) )+
            	    int cnt55=0;
            	    loop55:
            	    do {
            	        int alt55=2;
            	        int LA55_0 = input.LA(1);

            	        if ( (LA55_0==RULE_ID) ) {
            	            alt55=1;
            	        }


            	        switch (alt55) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:2269:10: ( ruleQualifiedName )
            	    	    {
            	    	    // InternalReqSpec.g:2269:10: ( ruleQualifiedName )
            	    	    // InternalReqSpec.g:2270:11: ruleQualifiedName
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      											if (current==null) {
            	    	      												current = createModelElement(grammarAccess.getGoalRule());
            	    	      											}
            	    	      										
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      											newCompositeNode(grammarAccess.getGoalAccess().getCategoryCategoryCrossReference_5_0_1_0());
            	    	      										
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_37);
            	    	    ruleQualifiedName();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      											afterParserOrEnumRuleCall();
            	    	      										
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt55 >= 1 ) break loop55;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(55, input);
            	                throw eee;
            	        }
            	        cnt55++;
            	    } while (true);


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getGoalAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // InternalReqSpec.g:2290:4: ({...}? => ( ({...}? => ( (lv_description_10_0= ruleDescription ) ) ) ) )
            	    {
            	    // InternalReqSpec.g:2290:4: ({...}? => ( ({...}? => ( (lv_description_10_0= ruleDescription ) ) ) ) )
            	    // InternalReqSpec.g:2291:5: {...}? => ( ({...}? => ( (lv_description_10_0= ruleDescription ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 1) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGoal", "getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 1)");
            	    }
            	    // InternalReqSpec.g:2291:101: ( ({...}? => ( (lv_description_10_0= ruleDescription ) ) ) )
            	    // InternalReqSpec.g:2292:6: ({...}? => ( (lv_description_10_0= ruleDescription ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 1);
            	    // InternalReqSpec.g:2295:9: ({...}? => ( (lv_description_10_0= ruleDescription ) ) )
            	    // InternalReqSpec.g:2295:10: {...}? => ( (lv_description_10_0= ruleDescription ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGoal", "true");
            	    }
            	    // InternalReqSpec.g:2295:19: ( (lv_description_10_0= ruleDescription ) )
            	    // InternalReqSpec.g:2295:20: (lv_description_10_0= ruleDescription )
            	    {
            	    // InternalReqSpec.g:2295:20: (lv_description_10_0= ruleDescription )
            	    // InternalReqSpec.g:2296:10: lv_description_10_0= ruleDescription
            	    {
            	    if ( state.backtracking==0 ) {

            	      										newCompositeNode(grammarAccess.getGoalAccess().getDescriptionDescriptionParserRuleCall_5_1_0());
            	      									
            	    }
            	    pushFollow(FollowSets000.FOLLOW_36);
            	    lv_description_10_0=ruleDescription();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      										if (current==null) {
            	      											current = createModelElementForParent(grammarAccess.getGoalRule());
            	      										}
            	      										set(
            	      											current,
            	      											"description",
            	      											lv_description_10_0,
            	      											"org.osate.alisa.common.Common.Description");
            	      										afterParserOrEnumRuleCall();
            	      									
            	    }

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getGoalAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 3 :
            	    // InternalReqSpec.g:2318:4: ({...}? => ( ({...}? => ( (lv_constants_11_0= ruleValDeclaration ) ) )+ ) )
            	    {
            	    // InternalReqSpec.g:2318:4: ({...}? => ( ({...}? => ( (lv_constants_11_0= ruleValDeclaration ) ) )+ ) )
            	    // InternalReqSpec.g:2319:5: {...}? => ( ({...}? => ( (lv_constants_11_0= ruleValDeclaration ) ) )+ )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 2) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGoal", "getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 2)");
            	    }
            	    // InternalReqSpec.g:2319:101: ( ({...}? => ( (lv_constants_11_0= ruleValDeclaration ) ) )+ )
            	    // InternalReqSpec.g:2320:6: ({...}? => ( (lv_constants_11_0= ruleValDeclaration ) ) )+
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 2);
            	    // InternalReqSpec.g:2323:9: ({...}? => ( (lv_constants_11_0= ruleValDeclaration ) ) )+
            	    int cnt56=0;
            	    loop56:
            	    do {
            	        int alt56=2;
            	        int LA56_0 = input.LA(1);

            	        if ( (LA56_0==60) ) {
            	            int LA56_2 = input.LA(2);

            	            if ( ((true)) ) {
            	                alt56=1;
            	            }


            	        }


            	        switch (alt56) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:2323:10: {...}? => ( (lv_constants_11_0= ruleValDeclaration ) )
            	    	    {
            	    	    if ( !((true)) ) {
            	    	        if (state.backtracking>0) {state.failed=true; return current;}
            	    	        throw new FailedPredicateException(input, "ruleGoal", "true");
            	    	    }
            	    	    // InternalReqSpec.g:2323:19: ( (lv_constants_11_0= ruleValDeclaration ) )
            	    	    // InternalReqSpec.g:2323:20: (lv_constants_11_0= ruleValDeclaration )
            	    	    {
            	    	    // InternalReqSpec.g:2323:20: (lv_constants_11_0= ruleValDeclaration )
            	    	    // InternalReqSpec.g:2324:10: lv_constants_11_0= ruleValDeclaration
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      										newCompositeNode(grammarAccess.getGoalAccess().getConstantsValDeclarationParserRuleCall_5_2_0());
            	    	      									
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_36);
            	    	    lv_constants_11_0=ruleValDeclaration();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      										if (current==null) {
            	    	      											current = createModelElementForParent(grammarAccess.getGoalRule());
            	    	      										}
            	    	      										add(
            	    	      											current,
            	    	      											"constants",
            	    	      											lv_constants_11_0,
            	    	      											"org.osate.reqspec.ReqSpec.ValDeclaration");
            	    	      										afterParserOrEnumRuleCall();
            	    	      									
            	    	    }

            	    	    }


            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt56 >= 1 ) break loop56;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(56, input);
            	                throw eee;
            	        }
            	        cnt56++;
            	    } while (true);

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getGoalAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 4 :
            	    // InternalReqSpec.g:2346:4: ({...}? => ( ({...}? => ( (lv_whencondition_12_0= ruleWhenCondition ) ) ) ) )
            	    {
            	    // InternalReqSpec.g:2346:4: ({...}? => ( ({...}? => ( (lv_whencondition_12_0= ruleWhenCondition ) ) ) ) )
            	    // InternalReqSpec.g:2347:5: {...}? => ( ({...}? => ( (lv_whencondition_12_0= ruleWhenCondition ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 3) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGoal", "getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 3)");
            	    }
            	    // InternalReqSpec.g:2347:101: ( ({...}? => ( (lv_whencondition_12_0= ruleWhenCondition ) ) ) )
            	    // InternalReqSpec.g:2348:6: ({...}? => ( (lv_whencondition_12_0= ruleWhenCondition ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 3);
            	    // InternalReqSpec.g:2351:9: ({...}? => ( (lv_whencondition_12_0= ruleWhenCondition ) ) )
            	    // InternalReqSpec.g:2351:10: {...}? => ( (lv_whencondition_12_0= ruleWhenCondition ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGoal", "true");
            	    }
            	    // InternalReqSpec.g:2351:19: ( (lv_whencondition_12_0= ruleWhenCondition ) )
            	    // InternalReqSpec.g:2351:20: (lv_whencondition_12_0= ruleWhenCondition )
            	    {
            	    // InternalReqSpec.g:2351:20: (lv_whencondition_12_0= ruleWhenCondition )
            	    // InternalReqSpec.g:2352:10: lv_whencondition_12_0= ruleWhenCondition
            	    {
            	    if ( state.backtracking==0 ) {

            	      										newCompositeNode(grammarAccess.getGoalAccess().getWhenconditionWhenConditionParserRuleCall_5_3_0());
            	      									
            	    }
            	    pushFollow(FollowSets000.FOLLOW_36);
            	    lv_whencondition_12_0=ruleWhenCondition();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      										if (current==null) {
            	      											current = createModelElementForParent(grammarAccess.getGoalRule());
            	      										}
            	      										set(
            	      											current,
            	      											"whencondition",
            	      											lv_whencondition_12_0,
            	      											"org.osate.reqspec.ReqSpec.WhenCondition");
            	      										afterParserOrEnumRuleCall();
            	      									
            	    }

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getGoalAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 5 :
            	    // InternalReqSpec.g:2374:4: ({...}? => ( ({...}? => ( (lv_rationale_13_0= ruleRationale ) ) ) ) )
            	    {
            	    // InternalReqSpec.g:2374:4: ({...}? => ( ({...}? => ( (lv_rationale_13_0= ruleRationale ) ) ) ) )
            	    // InternalReqSpec.g:2375:5: {...}? => ( ({...}? => ( (lv_rationale_13_0= ruleRationale ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 4) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGoal", "getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 4)");
            	    }
            	    // InternalReqSpec.g:2375:101: ( ({...}? => ( (lv_rationale_13_0= ruleRationale ) ) ) )
            	    // InternalReqSpec.g:2376:6: ({...}? => ( (lv_rationale_13_0= ruleRationale ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 4);
            	    // InternalReqSpec.g:2379:9: ({...}? => ( (lv_rationale_13_0= ruleRationale ) ) )
            	    // InternalReqSpec.g:2379:10: {...}? => ( (lv_rationale_13_0= ruleRationale ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGoal", "true");
            	    }
            	    // InternalReqSpec.g:2379:19: ( (lv_rationale_13_0= ruleRationale ) )
            	    // InternalReqSpec.g:2379:20: (lv_rationale_13_0= ruleRationale )
            	    {
            	    // InternalReqSpec.g:2379:20: (lv_rationale_13_0= ruleRationale )
            	    // InternalReqSpec.g:2380:10: lv_rationale_13_0= ruleRationale
            	    {
            	    if ( state.backtracking==0 ) {

            	      										newCompositeNode(grammarAccess.getGoalAccess().getRationaleRationaleParserRuleCall_5_4_0());
            	      									
            	    }
            	    pushFollow(FollowSets000.FOLLOW_36);
            	    lv_rationale_13_0=ruleRationale();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      										if (current==null) {
            	      											current = createModelElementForParent(grammarAccess.getGoalRule());
            	      										}
            	      										set(
            	      											current,
            	      											"rationale",
            	      											lv_rationale_13_0,
            	      											"org.osate.alisa.common.Common.Rationale");
            	      										afterParserOrEnumRuleCall();
            	      									
            	    }

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getGoalAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 6 :
            	    // InternalReqSpec.g:2402:4: ({...}? => ( ({...}? => ( (lv_changeUncertainty_14_0= ruleUncertainty ) ) ) ) )
            	    {
            	    // InternalReqSpec.g:2402:4: ({...}? => ( ({...}? => ( (lv_changeUncertainty_14_0= ruleUncertainty ) ) ) ) )
            	    // InternalReqSpec.g:2403:5: {...}? => ( ({...}? => ( (lv_changeUncertainty_14_0= ruleUncertainty ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 5) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGoal", "getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 5)");
            	    }
            	    // InternalReqSpec.g:2403:101: ( ({...}? => ( (lv_changeUncertainty_14_0= ruleUncertainty ) ) ) )
            	    // InternalReqSpec.g:2404:6: ({...}? => ( (lv_changeUncertainty_14_0= ruleUncertainty ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 5);
            	    // InternalReqSpec.g:2407:9: ({...}? => ( (lv_changeUncertainty_14_0= ruleUncertainty ) ) )
            	    // InternalReqSpec.g:2407:10: {...}? => ( (lv_changeUncertainty_14_0= ruleUncertainty ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGoal", "true");
            	    }
            	    // InternalReqSpec.g:2407:19: ( (lv_changeUncertainty_14_0= ruleUncertainty ) )
            	    // InternalReqSpec.g:2407:20: (lv_changeUncertainty_14_0= ruleUncertainty )
            	    {
            	    // InternalReqSpec.g:2407:20: (lv_changeUncertainty_14_0= ruleUncertainty )
            	    // InternalReqSpec.g:2408:10: lv_changeUncertainty_14_0= ruleUncertainty
            	    {
            	    if ( state.backtracking==0 ) {

            	      										newCompositeNode(grammarAccess.getGoalAccess().getChangeUncertaintyUncertaintyParserRuleCall_5_5_0());
            	      									
            	    }
            	    pushFollow(FollowSets000.FOLLOW_36);
            	    lv_changeUncertainty_14_0=ruleUncertainty();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      										if (current==null) {
            	      											current = createModelElementForParent(grammarAccess.getGoalRule());
            	      										}
            	      										set(
            	      											current,
            	      											"changeUncertainty",
            	      											lv_changeUncertainty_14_0,
            	      											"org.osate.alisa.common.Common.Uncertainty");
            	      										afterParserOrEnumRuleCall();
            	      									
            	    }

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getGoalAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 7 :
            	    // InternalReqSpec.g:2430:4: ({...}? => ( ({...}? => (otherlv_15= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    {
            	    // InternalReqSpec.g:2430:4: ({...}? => ( ({...}? => (otherlv_15= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    // InternalReqSpec.g:2431:5: {...}? => ( ({...}? => (otherlv_15= 'refines' ( ( ruleQualifiedName ) )+ ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 6) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGoal", "getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 6)");
            	    }
            	    // InternalReqSpec.g:2431:101: ( ({...}? => (otherlv_15= 'refines' ( ( ruleQualifiedName ) )+ ) ) )
            	    // InternalReqSpec.g:2432:6: ({...}? => (otherlv_15= 'refines' ( ( ruleQualifiedName ) )+ ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 6);
            	    // InternalReqSpec.g:2435:9: ({...}? => (otherlv_15= 'refines' ( ( ruleQualifiedName ) )+ ) )
            	    // InternalReqSpec.g:2435:10: {...}? => (otherlv_15= 'refines' ( ( ruleQualifiedName ) )+ )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGoal", "true");
            	    }
            	    // InternalReqSpec.g:2435:19: (otherlv_15= 'refines' ( ( ruleQualifiedName ) )+ )
            	    // InternalReqSpec.g:2435:20: otherlv_15= 'refines' ( ( ruleQualifiedName ) )+
            	    {
            	    otherlv_15=(Token)match(input,34,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_15, grammarAccess.getGoalAccess().getRefinesKeyword_5_6_0());
            	      								
            	    }
            	    // InternalReqSpec.g:2439:9: ( ( ruleQualifiedName ) )+
            	    int cnt57=0;
            	    loop57:
            	    do {
            	        int alt57=2;
            	        int LA57_0 = input.LA(1);

            	        if ( (LA57_0==RULE_ID) ) {
            	            alt57=1;
            	        }


            	        switch (alt57) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:2440:10: ( ruleQualifiedName )
            	    	    {
            	    	    // InternalReqSpec.g:2440:10: ( ruleQualifiedName )
            	    	    // InternalReqSpec.g:2441:11: ruleQualifiedName
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      											if (current==null) {
            	    	      												current = createModelElement(grammarAccess.getGoalRule());
            	    	      											}
            	    	      										
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      											newCompositeNode(grammarAccess.getGoalAccess().getRefinesReferenceGoalCrossReference_5_6_1_0());
            	    	      										
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_37);
            	    	    ruleQualifiedName();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      											afterParserOrEnumRuleCall();
            	    	      										
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt57 >= 1 ) break loop57;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(57, input);
            	                throw eee;
            	        }
            	        cnt57++;
            	    } while (true);


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getGoalAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 8 :
            	    // InternalReqSpec.g:2461:4: ({...}? => ( ({...}? => (otherlv_17= 'conflicts' otherlv_18= 'with' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    {
            	    // InternalReqSpec.g:2461:4: ({...}? => ( ({...}? => (otherlv_17= 'conflicts' otherlv_18= 'with' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    // InternalReqSpec.g:2462:5: {...}? => ( ({...}? => (otherlv_17= 'conflicts' otherlv_18= 'with' ( ( ruleQualifiedName ) )+ ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 7) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGoal", "getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 7)");
            	    }
            	    // InternalReqSpec.g:2462:101: ( ({...}? => (otherlv_17= 'conflicts' otherlv_18= 'with' ( ( ruleQualifiedName ) )+ ) ) )
            	    // InternalReqSpec.g:2463:6: ({...}? => (otherlv_17= 'conflicts' otherlv_18= 'with' ( ( ruleQualifiedName ) )+ ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 7);
            	    // InternalReqSpec.g:2466:9: ({...}? => (otherlv_17= 'conflicts' otherlv_18= 'with' ( ( ruleQualifiedName ) )+ ) )
            	    // InternalReqSpec.g:2466:10: {...}? => (otherlv_17= 'conflicts' otherlv_18= 'with' ( ( ruleQualifiedName ) )+ )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGoal", "true");
            	    }
            	    // InternalReqSpec.g:2466:19: (otherlv_17= 'conflicts' otherlv_18= 'with' ( ( ruleQualifiedName ) )+ )
            	    // InternalReqSpec.g:2466:20: otherlv_17= 'conflicts' otherlv_18= 'with' ( ( ruleQualifiedName ) )+
            	    {
            	    otherlv_17=(Token)match(input,35,FollowSets000.FOLLOW_38); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_17, grammarAccess.getGoalAccess().getConflictsKeyword_5_7_0());
            	      								
            	    }
            	    otherlv_18=(Token)match(input,36,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_18, grammarAccess.getGoalAccess().getWithKeyword_5_7_1());
            	      								
            	    }
            	    // InternalReqSpec.g:2474:9: ( ( ruleQualifiedName ) )+
            	    int cnt58=0;
            	    loop58:
            	    do {
            	        int alt58=2;
            	        int LA58_0 = input.LA(1);

            	        if ( (LA58_0==RULE_ID) ) {
            	            alt58=1;
            	        }


            	        switch (alt58) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:2475:10: ( ruleQualifiedName )
            	    	    {
            	    	    // InternalReqSpec.g:2475:10: ( ruleQualifiedName )
            	    	    // InternalReqSpec.g:2476:11: ruleQualifiedName
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      											if (current==null) {
            	    	      												current = createModelElement(grammarAccess.getGoalRule());
            	    	      											}
            	    	      										
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      											newCompositeNode(grammarAccess.getGoalAccess().getConflictsReferenceGoalCrossReference_5_7_2_0());
            	    	      										
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_37);
            	    	    ruleQualifiedName();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      											afterParserOrEnumRuleCall();
            	    	      										
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt58 >= 1 ) break loop58;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(58, input);
            	                throw eee;
            	        }
            	        cnt58++;
            	    } while (true);


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getGoalAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 9 :
            	    // InternalReqSpec.g:2496:4: ({...}? => ( ({...}? => (otherlv_20= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    {
            	    // InternalReqSpec.g:2496:4: ({...}? => ( ({...}? => (otherlv_20= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    // InternalReqSpec.g:2497:5: {...}? => ( ({...}? => (otherlv_20= 'evolves' ( ( ruleQualifiedName ) )+ ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 8) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGoal", "getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 8)");
            	    }
            	    // InternalReqSpec.g:2497:101: ( ({...}? => (otherlv_20= 'evolves' ( ( ruleQualifiedName ) )+ ) ) )
            	    // InternalReqSpec.g:2498:6: ({...}? => (otherlv_20= 'evolves' ( ( ruleQualifiedName ) )+ ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 8);
            	    // InternalReqSpec.g:2501:9: ({...}? => (otherlv_20= 'evolves' ( ( ruleQualifiedName ) )+ ) )
            	    // InternalReqSpec.g:2501:10: {...}? => (otherlv_20= 'evolves' ( ( ruleQualifiedName ) )+ )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGoal", "true");
            	    }
            	    // InternalReqSpec.g:2501:19: (otherlv_20= 'evolves' ( ( ruleQualifiedName ) )+ )
            	    // InternalReqSpec.g:2501:20: otherlv_20= 'evolves' ( ( ruleQualifiedName ) )+
            	    {
            	    otherlv_20=(Token)match(input,37,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_20, grammarAccess.getGoalAccess().getEvolvesKeyword_5_8_0());
            	      								
            	    }
            	    // InternalReqSpec.g:2505:9: ( ( ruleQualifiedName ) )+
            	    int cnt59=0;
            	    loop59:
            	    do {
            	        int alt59=2;
            	        int LA59_0 = input.LA(1);

            	        if ( (LA59_0==RULE_ID) ) {
            	            alt59=1;
            	        }


            	        switch (alt59) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:2506:10: ( ruleQualifiedName )
            	    	    {
            	    	    // InternalReqSpec.g:2506:10: ( ruleQualifiedName )
            	    	    // InternalReqSpec.g:2507:11: ruleQualifiedName
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      											if (current==null) {
            	    	      												current = createModelElement(grammarAccess.getGoalRule());
            	    	      											}
            	    	      										
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      											newCompositeNode(grammarAccess.getGoalAccess().getEvolvesReferenceRequirementCrossReference_5_8_1_0());
            	    	      										
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_37);
            	    	    ruleQualifiedName();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      											afterParserOrEnumRuleCall();
            	    	      										
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt59 >= 1 ) break loop59;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(59, input);
            	                throw eee;
            	        }
            	        cnt59++;
            	    } while (true);


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getGoalAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 10 :
            	    // InternalReqSpec.g:2527:4: ({...}? => ( ({...}? => ( ( (lv_dropped_22_0= 'dropped' ) ) ( (lv_dropRationale_23_0= RULE_STRING ) )? ) ) ) )
            	    {
            	    // InternalReqSpec.g:2527:4: ({...}? => ( ({...}? => ( ( (lv_dropped_22_0= 'dropped' ) ) ( (lv_dropRationale_23_0= RULE_STRING ) )? ) ) ) )
            	    // InternalReqSpec.g:2528:5: {...}? => ( ({...}? => ( ( (lv_dropped_22_0= 'dropped' ) ) ( (lv_dropRationale_23_0= RULE_STRING ) )? ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 9) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGoal", "getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 9)");
            	    }
            	    // InternalReqSpec.g:2528:101: ( ({...}? => ( ( (lv_dropped_22_0= 'dropped' ) ) ( (lv_dropRationale_23_0= RULE_STRING ) )? ) ) )
            	    // InternalReqSpec.g:2529:6: ({...}? => ( ( (lv_dropped_22_0= 'dropped' ) ) ( (lv_dropRationale_23_0= RULE_STRING ) )? ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 9);
            	    // InternalReqSpec.g:2532:9: ({...}? => ( ( (lv_dropped_22_0= 'dropped' ) ) ( (lv_dropRationale_23_0= RULE_STRING ) )? ) )
            	    // InternalReqSpec.g:2532:10: {...}? => ( ( (lv_dropped_22_0= 'dropped' ) ) ( (lv_dropRationale_23_0= RULE_STRING ) )? )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGoal", "true");
            	    }
            	    // InternalReqSpec.g:2532:19: ( ( (lv_dropped_22_0= 'dropped' ) ) ( (lv_dropRationale_23_0= RULE_STRING ) )? )
            	    // InternalReqSpec.g:2532:20: ( (lv_dropped_22_0= 'dropped' ) ) ( (lv_dropRationale_23_0= RULE_STRING ) )?
            	    {
            	    // InternalReqSpec.g:2532:20: ( (lv_dropped_22_0= 'dropped' ) )
            	    // InternalReqSpec.g:2533:10: (lv_dropped_22_0= 'dropped' )
            	    {
            	    // InternalReqSpec.g:2533:10: (lv_dropped_22_0= 'dropped' )
            	    // InternalReqSpec.g:2534:11: lv_dropped_22_0= 'dropped'
            	    {
            	    lv_dropped_22_0=(Token)match(input,38,FollowSets000.FOLLOW_39); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      											newLeafNode(lv_dropped_22_0, grammarAccess.getGoalAccess().getDroppedDroppedKeyword_5_9_0_0());
            	      										
            	    }
            	    if ( state.backtracking==0 ) {

            	      											if (current==null) {
            	      												current = createModelElement(grammarAccess.getGoalRule());
            	      											}
            	      											setWithLastConsumed(current, "dropped", true, "dropped");
            	      										
            	    }

            	    }


            	    }

            	    // InternalReqSpec.g:2546:9: ( (lv_dropRationale_23_0= RULE_STRING ) )?
            	    int alt60=2;
            	    int LA60_0 = input.LA(1);

            	    if ( (LA60_0==RULE_STRING) ) {
            	        alt60=1;
            	    }
            	    switch (alt60) {
            	        case 1 :
            	            // InternalReqSpec.g:2547:10: (lv_dropRationale_23_0= RULE_STRING )
            	            {
            	            // InternalReqSpec.g:2547:10: (lv_dropRationale_23_0= RULE_STRING )
            	            // InternalReqSpec.g:2548:11: lv_dropRationale_23_0= RULE_STRING
            	            {
            	            lv_dropRationale_23_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_36); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              											newLeafNode(lv_dropRationale_23_0, grammarAccess.getGoalAccess().getDropRationaleSTRINGTerminalRuleCall_5_9_1_0());
            	              										
            	            }
            	            if ( state.backtracking==0 ) {

            	              											if (current==null) {
            	              												current = createModelElement(grammarAccess.getGoalRule());
            	              											}
            	              											setWithLastConsumed(
            	              												current,
            	              												"dropRationale",
            	              												lv_dropRationale_23_0,
            	              												"org.eclipse.xtext.common.Terminals.STRING");
            	              										
            	            }

            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getGoalAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 11 :
            	    // InternalReqSpec.g:2570:4: ({...}? => ( ({...}? => (otherlv_24= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    {
            	    // InternalReqSpec.g:2570:4: ({...}? => ( ({...}? => (otherlv_24= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    // InternalReqSpec.g:2571:5: {...}? => ( ({...}? => (otherlv_24= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 10) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGoal", "getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 10)");
            	    }
            	    // InternalReqSpec.g:2571:102: ( ({...}? => (otherlv_24= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) )
            	    // InternalReqSpec.g:2572:6: ({...}? => (otherlv_24= 'stakeholder' ( ( ruleQualifiedName ) )+ ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 10);
            	    // InternalReqSpec.g:2575:9: ({...}? => (otherlv_24= 'stakeholder' ( ( ruleQualifiedName ) )+ ) )
            	    // InternalReqSpec.g:2575:10: {...}? => (otherlv_24= 'stakeholder' ( ( ruleQualifiedName ) )+ )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGoal", "true");
            	    }
            	    // InternalReqSpec.g:2575:19: (otherlv_24= 'stakeholder' ( ( ruleQualifiedName ) )+ )
            	    // InternalReqSpec.g:2575:20: otherlv_24= 'stakeholder' ( ( ruleQualifiedName ) )+
            	    {
            	    otherlv_24=(Token)match(input,20,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_24, grammarAccess.getGoalAccess().getStakeholderKeyword_5_10_0());
            	      								
            	    }
            	    // InternalReqSpec.g:2579:9: ( ( ruleQualifiedName ) )+
            	    int cnt61=0;
            	    loop61:
            	    do {
            	        int alt61=2;
            	        int LA61_0 = input.LA(1);

            	        if ( (LA61_0==RULE_ID) ) {
            	            alt61=1;
            	        }


            	        switch (alt61) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:2580:10: ( ruleQualifiedName )
            	    	    {
            	    	    // InternalReqSpec.g:2580:10: ( ruleQualifiedName )
            	    	    // InternalReqSpec.g:2581:11: ruleQualifiedName
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      											if (current==null) {
            	    	      												current = createModelElement(grammarAccess.getGoalRule());
            	    	      											}
            	    	      										
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      											newCompositeNode(grammarAccess.getGoalAccess().getStakeholderReferenceStakeholderCrossReference_5_10_1_0());
            	    	      										
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_37);
            	    	    ruleQualifiedName();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      											afterParserOrEnumRuleCall();
            	    	      										
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt61 >= 1 ) break loop61;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(61, input);
            	                throw eee;
            	        }
            	        cnt61++;
            	    } while (true);


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getGoalAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 12 :
            	    // InternalReqSpec.g:2601:4: ({...}? => ( ({...}? => (otherlv_26= 'see' otherlv_27= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    {
            	    // InternalReqSpec.g:2601:4: ({...}? => ( ({...}? => (otherlv_26= 'see' otherlv_27= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    // InternalReqSpec.g:2602:5: {...}? => ( ({...}? => (otherlv_26= 'see' otherlv_27= 'goal' ( ( ruleQualifiedName ) )+ ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 11) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGoal", "getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 11)");
            	    }
            	    // InternalReqSpec.g:2602:102: ( ({...}? => (otherlv_26= 'see' otherlv_27= 'goal' ( ( ruleQualifiedName ) )+ ) ) )
            	    // InternalReqSpec.g:2603:6: ({...}? => (otherlv_26= 'see' otherlv_27= 'goal' ( ( ruleQualifiedName ) )+ ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 11);
            	    // InternalReqSpec.g:2606:9: ({...}? => (otherlv_26= 'see' otherlv_27= 'goal' ( ( ruleQualifiedName ) )+ ) )
            	    // InternalReqSpec.g:2606:10: {...}? => (otherlv_26= 'see' otherlv_27= 'goal' ( ( ruleQualifiedName ) )+ )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGoal", "true");
            	    }
            	    // InternalReqSpec.g:2606:19: (otherlv_26= 'see' otherlv_27= 'goal' ( ( ruleQualifiedName ) )+ )
            	    // InternalReqSpec.g:2606:20: otherlv_26= 'see' otherlv_27= 'goal' ( ( ruleQualifiedName ) )+
            	    {
            	    otherlv_26=(Token)match(input,25,FollowSets000.FOLLOW_40); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_26, grammarAccess.getGoalAccess().getSeeKeyword_5_11_0());
            	      								
            	    }
            	    otherlv_27=(Token)match(input,32,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_27, grammarAccess.getGoalAccess().getGoalKeyword_5_11_1());
            	      								
            	    }
            	    // InternalReqSpec.g:2614:9: ( ( ruleQualifiedName ) )+
            	    int cnt62=0;
            	    loop62:
            	    do {
            	        int alt62=2;
            	        int LA62_0 = input.LA(1);

            	        if ( (LA62_0==RULE_ID) ) {
            	            alt62=1;
            	        }


            	        switch (alt62) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:2615:10: ( ruleQualifiedName )
            	    	    {
            	    	    // InternalReqSpec.g:2615:10: ( ruleQualifiedName )
            	    	    // InternalReqSpec.g:2616:11: ruleQualifiedName
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      											if (current==null) {
            	    	      												current = createModelElement(grammarAccess.getGoalRule());
            	    	      											}
            	    	      										
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      											newCompositeNode(grammarAccess.getGoalAccess().getGoalReferenceGoalCrossReference_5_11_2_0());
            	    	      										
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_37);
            	    	    ruleQualifiedName();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      											afterParserOrEnumRuleCall();
            	    	      										
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt62 >= 1 ) break loop62;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(62, input);
            	                throw eee;
            	        }
            	        cnt62++;
            	    } while (true);


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getGoalAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 13 :
            	    // InternalReqSpec.g:2636:4: ({...}? => ( ({...}? => (otherlv_29= 'see' otherlv_30= 'document' ( (lv_docReference_31_0= ruleExternalDocument ) )+ ) ) ) )
            	    {
            	    // InternalReqSpec.g:2636:4: ({...}? => ( ({...}? => (otherlv_29= 'see' otherlv_30= 'document' ( (lv_docReference_31_0= ruleExternalDocument ) )+ ) ) ) )
            	    // InternalReqSpec.g:2637:5: {...}? => ( ({...}? => (otherlv_29= 'see' otherlv_30= 'document' ( (lv_docReference_31_0= ruleExternalDocument ) )+ ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 12) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGoal", "getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 12)");
            	    }
            	    // InternalReqSpec.g:2637:102: ( ({...}? => (otherlv_29= 'see' otherlv_30= 'document' ( (lv_docReference_31_0= ruleExternalDocument ) )+ ) ) )
            	    // InternalReqSpec.g:2638:6: ({...}? => (otherlv_29= 'see' otherlv_30= 'document' ( (lv_docReference_31_0= ruleExternalDocument ) )+ ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 12);
            	    // InternalReqSpec.g:2641:9: ({...}? => (otherlv_29= 'see' otherlv_30= 'document' ( (lv_docReference_31_0= ruleExternalDocument ) )+ ) )
            	    // InternalReqSpec.g:2641:10: {...}? => (otherlv_29= 'see' otherlv_30= 'document' ( (lv_docReference_31_0= ruleExternalDocument ) )+ )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGoal", "true");
            	    }
            	    // InternalReqSpec.g:2641:19: (otherlv_29= 'see' otherlv_30= 'document' ( (lv_docReference_31_0= ruleExternalDocument ) )+ )
            	    // InternalReqSpec.g:2641:20: otherlv_29= 'see' otherlv_30= 'document' ( (lv_docReference_31_0= ruleExternalDocument ) )+
            	    {
            	    otherlv_29=(Token)match(input,25,FollowSets000.FOLLOW_17); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_29, grammarAccess.getGoalAccess().getSeeKeyword_5_12_0());
            	      								
            	    }
            	    otherlv_30=(Token)match(input,26,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_30, grammarAccess.getGoalAccess().getDocumentKeyword_5_12_1());
            	      								
            	    }
            	    // InternalReqSpec.g:2649:9: ( (lv_docReference_31_0= ruleExternalDocument ) )+
            	    int cnt63=0;
            	    loop63:
            	    do {
            	        int alt63=2;
            	        int LA63_0 = input.LA(1);

            	        if ( (LA63_0==RULE_ID) ) {
            	            alt63=1;
            	        }


            	        switch (alt63) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:2650:10: (lv_docReference_31_0= ruleExternalDocument )
            	    	    {
            	    	    // InternalReqSpec.g:2650:10: (lv_docReference_31_0= ruleExternalDocument )
            	    	    // InternalReqSpec.g:2651:11: lv_docReference_31_0= ruleExternalDocument
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      											newCompositeNode(grammarAccess.getGoalAccess().getDocReferenceExternalDocumentParserRuleCall_5_12_2_0());
            	    	      										
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_37);
            	    	    lv_docReference_31_0=ruleExternalDocument();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      											if (current==null) {
            	    	      												current = createModelElementForParent(grammarAccess.getGoalRule());
            	    	      											}
            	    	      											add(
            	    	      												current,
            	    	      												"docReference",
            	    	      												lv_docReference_31_0,
            	    	      												"org.osate.reqspec.ReqSpec.ExternalDocument");
            	    	      											afterParserOrEnumRuleCall();
            	    	      										
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt63 >= 1 ) break loop63;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(63, input);
            	                throw eee;
            	        }
            	        cnt63++;
            	    } while (true);


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getGoalAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 14 :
            	    // InternalReqSpec.g:2674:4: ({...}? => ( ({...}? => (otherlv_32= 'issues' ( (lv_issues_33_0= RULE_STRING ) )+ ) ) ) )
            	    {
            	    // InternalReqSpec.g:2674:4: ({...}? => ( ({...}? => (otherlv_32= 'issues' ( (lv_issues_33_0= RULE_STRING ) )+ ) ) ) )
            	    // InternalReqSpec.g:2675:5: {...}? => ( ({...}? => (otherlv_32= 'issues' ( (lv_issues_33_0= RULE_STRING ) )+ ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 13) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGoal", "getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 13)");
            	    }
            	    // InternalReqSpec.g:2675:102: ( ({...}? => (otherlv_32= 'issues' ( (lv_issues_33_0= RULE_STRING ) )+ ) ) )
            	    // InternalReqSpec.g:2676:6: ({...}? => (otherlv_32= 'issues' ( (lv_issues_33_0= RULE_STRING ) )+ ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 13);
            	    // InternalReqSpec.g:2679:9: ({...}? => (otherlv_32= 'issues' ( (lv_issues_33_0= RULE_STRING ) )+ ) )
            	    // InternalReqSpec.g:2679:10: {...}? => (otherlv_32= 'issues' ( (lv_issues_33_0= RULE_STRING ) )+ )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGoal", "true");
            	    }
            	    // InternalReqSpec.g:2679:19: (otherlv_32= 'issues' ( (lv_issues_33_0= RULE_STRING ) )+ )
            	    // InternalReqSpec.g:2679:20: otherlv_32= 'issues' ( (lv_issues_33_0= RULE_STRING ) )+
            	    {
            	    otherlv_32=(Token)match(input,27,FollowSets000.FOLLOW_9); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_32, grammarAccess.getGoalAccess().getIssuesKeyword_5_13_0());
            	      								
            	    }
            	    // InternalReqSpec.g:2683:9: ( (lv_issues_33_0= RULE_STRING ) )+
            	    int cnt64=0;
            	    loop64:
            	    do {
            	        int alt64=2;
            	        int LA64_0 = input.LA(1);

            	        if ( (LA64_0==RULE_STRING) ) {
            	            alt64=1;
            	        }


            	        switch (alt64) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:2684:10: (lv_issues_33_0= RULE_STRING )
            	    	    {
            	    	    // InternalReqSpec.g:2684:10: (lv_issues_33_0= RULE_STRING )
            	    	    // InternalReqSpec.g:2685:11: lv_issues_33_0= RULE_STRING
            	    	    {
            	    	    lv_issues_33_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_39); if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      											newLeafNode(lv_issues_33_0, grammarAccess.getGoalAccess().getIssuesSTRINGTerminalRuleCall_5_13_1_0());
            	    	      										
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      											if (current==null) {
            	    	      												current = createModelElement(grammarAccess.getGoalRule());
            	    	      											}
            	    	      											addWithLastConsumed(
            	    	      												current,
            	    	      												"issues",
            	    	      												lv_issues_33_0,
            	    	      												"org.eclipse.xtext.common.Terminals.STRING");
            	    	      										
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt64 >= 1 ) break loop64;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(64, input);
            	                throw eee;
            	        }
            	        cnt64++;
            	    } while (true);


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getGoalAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop65;
                }
            } while (true);


            }


            }

            getUnorderedGroupHelper().leave(grammarAccess.getGoalAccess().getUnorderedGroup_5());

            }

            otherlv_34=(Token)match(input,19,FollowSets000.FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_34, grammarAccess.getGoalAccess().getRightSquareBracketKeyword_6());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleGoal"


    // $ANTLR start "entryRuleSystemRequirement"
    // InternalReqSpec.g:2722:1: entryRuleSystemRequirement returns [EObject current=null] : iv_ruleSystemRequirement= ruleSystemRequirement EOF ;
    public final EObject entryRuleSystemRequirement() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSystemRequirement = null;


        try {
            // InternalReqSpec.g:2722:58: (iv_ruleSystemRequirement= ruleSystemRequirement EOF )
            // InternalReqSpec.g:2723:2: iv_ruleSystemRequirement= ruleSystemRequirement EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getSystemRequirementRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleSystemRequirement=ruleSystemRequirement();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleSystemRequirement; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSystemRequirement"


    // $ANTLR start "ruleSystemRequirement"
    // InternalReqSpec.g:2729:1: ruleSystemRequirement returns [EObject current=null] : (otherlv_0= 'requirement' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? (otherlv_4= 'for' ( (otherlv_5= RULE_ID ) ) )? otherlv_6= '[' ( (otherlv_7= 'category' ( ( ruleQualifiedName ) )+ ) | ( (lv_description_9_0= ruleDescription ) ) | ( (lv_whencondition_10_0= ruleWhenCondition ) ) | ( (lv_predicate_11_0= ruleReqPredicate ) ) | ( (lv_rationale_12_0= ruleRationale ) ) | ( (lv_changeUncertainty_13_0= ruleUncertainty ) ) | (otherlv_14= 'mitigates' ( ( (otherlv_15= RULE_ID ) ) | ( (lv_exceptionText_16_0= RULE_STRING ) ) ) ) | (otherlv_17= 'inherits' ( ( ruleQualifiedName ) ) ) | ( ( (lv_dropped_19_0= 'dropped' ) ) ( (lv_dropRationale_20_0= RULE_STRING ) )? ) | ( (lv_constants_21_0= ruleValDeclaration ) ) | ( (lv_computes_22_0= ruleComputeDeclaration ) ) | (otherlv_23= 'refines' ( ( ruleQualifiedName ) )+ ) | (otherlv_25= 'decomposes' ( ( ruleQualifiedName ) )+ ) | (otherlv_27= 'evolves' ( ( ruleQualifiedName ) )+ ) | (otherlv_29= 'development' otherlv_30= 'stakeholder' ( ( ruleQualifiedName ) )+ ) | (otherlv_32= 'see' otherlv_33= 'goal' ( ( ruleQualifiedName ) )+ ) | (otherlv_35= 'see' otherlv_36= 'requirement' ( ( ruleQualifiedName ) )+ ) | (otherlv_38= 'see' otherlv_39= 'document' ( (lv_docReference_40_0= ruleExternalDocument ) )+ ) | (otherlv_41= 'issues' ( (lv_issues_42_0= RULE_STRING ) )+ ) )* otherlv_43= ']' ) ;
    public final EObject ruleSystemRequirement() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token lv_title_3_0=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        Token otherlv_7=null;
        Token otherlv_14=null;
        Token otherlv_15=null;
        Token lv_exceptionText_16_0=null;
        Token otherlv_17=null;
        Token lv_dropped_19_0=null;
        Token lv_dropRationale_20_0=null;
        Token otherlv_23=null;
        Token otherlv_25=null;
        Token otherlv_27=null;
        Token otherlv_29=null;
        Token otherlv_30=null;
        Token otherlv_32=null;
        Token otherlv_33=null;
        Token otherlv_35=null;
        Token otherlv_36=null;
        Token otherlv_38=null;
        Token otherlv_39=null;
        Token otherlv_41=null;
        Token lv_issues_42_0=null;
        Token otherlv_43=null;
        EObject lv_description_9_0 = null;

        EObject lv_whencondition_10_0 = null;

        EObject lv_predicate_11_0 = null;

        EObject lv_rationale_12_0 = null;

        EObject lv_changeUncertainty_13_0 = null;

        EObject lv_constants_21_0 = null;

        EObject lv_computes_22_0 = null;

        EObject lv_docReference_40_0 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:2735:2: ( (otherlv_0= 'requirement' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? (otherlv_4= 'for' ( (otherlv_5= RULE_ID ) ) )? otherlv_6= '[' ( (otherlv_7= 'category' ( ( ruleQualifiedName ) )+ ) | ( (lv_description_9_0= ruleDescription ) ) | ( (lv_whencondition_10_0= ruleWhenCondition ) ) | ( (lv_predicate_11_0= ruleReqPredicate ) ) | ( (lv_rationale_12_0= ruleRationale ) ) | ( (lv_changeUncertainty_13_0= ruleUncertainty ) ) | (otherlv_14= 'mitigates' ( ( (otherlv_15= RULE_ID ) ) | ( (lv_exceptionText_16_0= RULE_STRING ) ) ) ) | (otherlv_17= 'inherits' ( ( ruleQualifiedName ) ) ) | ( ( (lv_dropped_19_0= 'dropped' ) ) ( (lv_dropRationale_20_0= RULE_STRING ) )? ) | ( (lv_constants_21_0= ruleValDeclaration ) ) | ( (lv_computes_22_0= ruleComputeDeclaration ) ) | (otherlv_23= 'refines' ( ( ruleQualifiedName ) )+ ) | (otherlv_25= 'decomposes' ( ( ruleQualifiedName ) )+ ) | (otherlv_27= 'evolves' ( ( ruleQualifiedName ) )+ ) | (otherlv_29= 'development' otherlv_30= 'stakeholder' ( ( ruleQualifiedName ) )+ ) | (otherlv_32= 'see' otherlv_33= 'goal' ( ( ruleQualifiedName ) )+ ) | (otherlv_35= 'see' otherlv_36= 'requirement' ( ( ruleQualifiedName ) )+ ) | (otherlv_38= 'see' otherlv_39= 'document' ( (lv_docReference_40_0= ruleExternalDocument ) )+ ) | (otherlv_41= 'issues' ( (lv_issues_42_0= RULE_STRING ) )+ ) )* otherlv_43= ']' ) )
            // InternalReqSpec.g:2736:2: (otherlv_0= 'requirement' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? (otherlv_4= 'for' ( (otherlv_5= RULE_ID ) ) )? otherlv_6= '[' ( (otherlv_7= 'category' ( ( ruleQualifiedName ) )+ ) | ( (lv_description_9_0= ruleDescription ) ) | ( (lv_whencondition_10_0= ruleWhenCondition ) ) | ( (lv_predicate_11_0= ruleReqPredicate ) ) | ( (lv_rationale_12_0= ruleRationale ) ) | ( (lv_changeUncertainty_13_0= ruleUncertainty ) ) | (otherlv_14= 'mitigates' ( ( (otherlv_15= RULE_ID ) ) | ( (lv_exceptionText_16_0= RULE_STRING ) ) ) ) | (otherlv_17= 'inherits' ( ( ruleQualifiedName ) ) ) | ( ( (lv_dropped_19_0= 'dropped' ) ) ( (lv_dropRationale_20_0= RULE_STRING ) )? ) | ( (lv_constants_21_0= ruleValDeclaration ) ) | ( (lv_computes_22_0= ruleComputeDeclaration ) ) | (otherlv_23= 'refines' ( ( ruleQualifiedName ) )+ ) | (otherlv_25= 'decomposes' ( ( ruleQualifiedName ) )+ ) | (otherlv_27= 'evolves' ( ( ruleQualifiedName ) )+ ) | (otherlv_29= 'development' otherlv_30= 'stakeholder' ( ( ruleQualifiedName ) )+ ) | (otherlv_32= 'see' otherlv_33= 'goal' ( ( ruleQualifiedName ) )+ ) | (otherlv_35= 'see' otherlv_36= 'requirement' ( ( ruleQualifiedName ) )+ ) | (otherlv_38= 'see' otherlv_39= 'document' ( (lv_docReference_40_0= ruleExternalDocument ) )+ ) | (otherlv_41= 'issues' ( (lv_issues_42_0= RULE_STRING ) )+ ) )* otherlv_43= ']' )
            {
            // InternalReqSpec.g:2736:2: (otherlv_0= 'requirement' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? (otherlv_4= 'for' ( (otherlv_5= RULE_ID ) ) )? otherlv_6= '[' ( (otherlv_7= 'category' ( ( ruleQualifiedName ) )+ ) | ( (lv_description_9_0= ruleDescription ) ) | ( (lv_whencondition_10_0= ruleWhenCondition ) ) | ( (lv_predicate_11_0= ruleReqPredicate ) ) | ( (lv_rationale_12_0= ruleRationale ) ) | ( (lv_changeUncertainty_13_0= ruleUncertainty ) ) | (otherlv_14= 'mitigates' ( ( (otherlv_15= RULE_ID ) ) | ( (lv_exceptionText_16_0= RULE_STRING ) ) ) ) | (otherlv_17= 'inherits' ( ( ruleQualifiedName ) ) ) | ( ( (lv_dropped_19_0= 'dropped' ) ) ( (lv_dropRationale_20_0= RULE_STRING ) )? ) | ( (lv_constants_21_0= ruleValDeclaration ) ) | ( (lv_computes_22_0= ruleComputeDeclaration ) ) | (otherlv_23= 'refines' ( ( ruleQualifiedName ) )+ ) | (otherlv_25= 'decomposes' ( ( ruleQualifiedName ) )+ ) | (otherlv_27= 'evolves' ( ( ruleQualifiedName ) )+ ) | (otherlv_29= 'development' otherlv_30= 'stakeholder' ( ( ruleQualifiedName ) )+ ) | (otherlv_32= 'see' otherlv_33= 'goal' ( ( ruleQualifiedName ) )+ ) | (otherlv_35= 'see' otherlv_36= 'requirement' ( ( ruleQualifiedName ) )+ ) | (otherlv_38= 'see' otherlv_39= 'document' ( (lv_docReference_40_0= ruleExternalDocument ) )+ ) | (otherlv_41= 'issues' ( (lv_issues_42_0= RULE_STRING ) )+ ) )* otherlv_43= ']' )
            // InternalReqSpec.g:2737:3: otherlv_0= 'requirement' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? (otherlv_4= 'for' ( (otherlv_5= RULE_ID ) ) )? otherlv_6= '[' ( (otherlv_7= 'category' ( ( ruleQualifiedName ) )+ ) | ( (lv_description_9_0= ruleDescription ) ) | ( (lv_whencondition_10_0= ruleWhenCondition ) ) | ( (lv_predicate_11_0= ruleReqPredicate ) ) | ( (lv_rationale_12_0= ruleRationale ) ) | ( (lv_changeUncertainty_13_0= ruleUncertainty ) ) | (otherlv_14= 'mitigates' ( ( (otherlv_15= RULE_ID ) ) | ( (lv_exceptionText_16_0= RULE_STRING ) ) ) ) | (otherlv_17= 'inherits' ( ( ruleQualifiedName ) ) ) | ( ( (lv_dropped_19_0= 'dropped' ) ) ( (lv_dropRationale_20_0= RULE_STRING ) )? ) | ( (lv_constants_21_0= ruleValDeclaration ) ) | ( (lv_computes_22_0= ruleComputeDeclaration ) ) | (otherlv_23= 'refines' ( ( ruleQualifiedName ) )+ ) | (otherlv_25= 'decomposes' ( ( ruleQualifiedName ) )+ ) | (otherlv_27= 'evolves' ( ( ruleQualifiedName ) )+ ) | (otherlv_29= 'development' otherlv_30= 'stakeholder' ( ( ruleQualifiedName ) )+ ) | (otherlv_32= 'see' otherlv_33= 'goal' ( ( ruleQualifiedName ) )+ ) | (otherlv_35= 'see' otherlv_36= 'requirement' ( ( ruleQualifiedName ) )+ ) | (otherlv_38= 'see' otherlv_39= 'document' ( (lv_docReference_40_0= ruleExternalDocument ) )+ ) | (otherlv_41= 'issues' ( (lv_issues_42_0= RULE_STRING ) )+ ) )* otherlv_43= ']'
            {
            otherlv_0=(Token)match(input,39,FollowSets000.FOLLOW_4); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getSystemRequirementAccess().getRequirementKeyword_0());
              		
            }
            // InternalReqSpec.g:2741:3: ( (lv_name_1_0= RULE_ID ) )
            // InternalReqSpec.g:2742:4: (lv_name_1_0= RULE_ID )
            {
            // InternalReqSpec.g:2742:4: (lv_name_1_0= RULE_ID )
            // InternalReqSpec.g:2743:5: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_34); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_1_0, grammarAccess.getSystemRequirementAccess().getNameIDTerminalRuleCall_1_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getSystemRequirementRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_1_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalReqSpec.g:2759:3: (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )?
            int alt66=2;
            int LA66_0 = input.LA(1);

            if ( (LA66_0==22) ) {
                alt66=1;
            }
            switch (alt66) {
                case 1 :
                    // InternalReqSpec.g:2760:4: otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) )
                    {
                    otherlv_2=(Token)match(input,22,FollowSets000.FOLLOW_9); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_2, grammarAccess.getSystemRequirementAccess().getColonKeyword_2_0());
                      			
                    }
                    // InternalReqSpec.g:2764:4: ( (lv_title_3_0= RULE_STRING ) )
                    // InternalReqSpec.g:2765:5: (lv_title_3_0= RULE_STRING )
                    {
                    // InternalReqSpec.g:2765:5: (lv_title_3_0= RULE_STRING )
                    // InternalReqSpec.g:2766:6: lv_title_3_0= RULE_STRING
                    {
                    lv_title_3_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_35); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_title_3_0, grammarAccess.getSystemRequirementAccess().getTitleSTRINGTerminalRuleCall_2_1_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getSystemRequirementRule());
                      						}
                      						setWithLastConsumed(
                      							current,
                      							"title",
                      							lv_title_3_0,
                      							"org.eclipse.xtext.common.Terminals.STRING");
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            // InternalReqSpec.g:2783:3: (otherlv_4= 'for' ( (otherlv_5= RULE_ID ) ) )?
            int alt67=2;
            int LA67_0 = input.LA(1);

            if ( (LA67_0==23) ) {
                alt67=1;
            }
            switch (alt67) {
                case 1 :
                    // InternalReqSpec.g:2784:4: otherlv_4= 'for' ( (otherlv_5= RULE_ID ) )
                    {
                    otherlv_4=(Token)match(input,23,FollowSets000.FOLLOW_4); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_4, grammarAccess.getSystemRequirementAccess().getForKeyword_3_0());
                      			
                    }
                    // InternalReqSpec.g:2788:4: ( (otherlv_5= RULE_ID ) )
                    // InternalReqSpec.g:2789:5: (otherlv_5= RULE_ID )
                    {
                    // InternalReqSpec.g:2789:5: (otherlv_5= RULE_ID )
                    // InternalReqSpec.g:2790:6: otherlv_5= RULE_ID
                    {
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getSystemRequirementRule());
                      						}
                      					
                    }
                    otherlv_5=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_5); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(otherlv_5, grammarAccess.getSystemRequirementAccess().getTargetElementNamedElementCrossReference_3_1_0());
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            otherlv_6=(Token)match(input,18,FollowSets000.FOLLOW_41); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_6, grammarAccess.getSystemRequirementAccess().getLeftSquareBracketKeyword_4());
              		
            }
            // InternalReqSpec.g:2806:3: ( (otherlv_7= 'category' ( ( ruleQualifiedName ) )+ ) | ( (lv_description_9_0= ruleDescription ) ) | ( (lv_whencondition_10_0= ruleWhenCondition ) ) | ( (lv_predicate_11_0= ruleReqPredicate ) ) | ( (lv_rationale_12_0= ruleRationale ) ) | ( (lv_changeUncertainty_13_0= ruleUncertainty ) ) | (otherlv_14= 'mitigates' ( ( (otherlv_15= RULE_ID ) ) | ( (lv_exceptionText_16_0= RULE_STRING ) ) ) ) | (otherlv_17= 'inherits' ( ( ruleQualifiedName ) ) ) | ( ( (lv_dropped_19_0= 'dropped' ) ) ( (lv_dropRationale_20_0= RULE_STRING ) )? ) | ( (lv_constants_21_0= ruleValDeclaration ) ) | ( (lv_computes_22_0= ruleComputeDeclaration ) ) | (otherlv_23= 'refines' ( ( ruleQualifiedName ) )+ ) | (otherlv_25= 'decomposes' ( ( ruleQualifiedName ) )+ ) | (otherlv_27= 'evolves' ( ( ruleQualifiedName ) )+ ) | (otherlv_29= 'development' otherlv_30= 'stakeholder' ( ( ruleQualifiedName ) )+ ) | (otherlv_32= 'see' otherlv_33= 'goal' ( ( ruleQualifiedName ) )+ ) | (otherlv_35= 'see' otherlv_36= 'requirement' ( ( ruleQualifiedName ) )+ ) | (otherlv_38= 'see' otherlv_39= 'document' ( (lv_docReference_40_0= ruleExternalDocument ) )+ ) | (otherlv_41= 'issues' ( (lv_issues_42_0= RULE_STRING ) )+ ) )*
            loop79:
            do {
                int alt79=20;
                alt79 = dfa79.predict(input);
                switch (alt79) {
            	case 1 :
            	    // InternalReqSpec.g:2807:4: (otherlv_7= 'category' ( ( ruleQualifiedName ) )+ )
            	    {
            	    // InternalReqSpec.g:2807:4: (otherlv_7= 'category' ( ( ruleQualifiedName ) )+ )
            	    // InternalReqSpec.g:2808:5: otherlv_7= 'category' ( ( ruleQualifiedName ) )+
            	    {
            	    otherlv_7=(Token)match(input,33,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					newLeafNode(otherlv_7, grammarAccess.getSystemRequirementAccess().getCategoryKeyword_5_0_0());
            	      				
            	    }
            	    // InternalReqSpec.g:2812:5: ( ( ruleQualifiedName ) )+
            	    int cnt68=0;
            	    loop68:
            	    do {
            	        int alt68=2;
            	        int LA68_0 = input.LA(1);

            	        if ( (LA68_0==RULE_ID) ) {
            	            alt68=1;
            	        }


            	        switch (alt68) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:2813:6: ( ruleQualifiedName )
            	    	    {
            	    	    // InternalReqSpec.g:2813:6: ( ruleQualifiedName )
            	    	    // InternalReqSpec.g:2814:7: ruleQualifiedName
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      							if (current==null) {
            	    	      								current = createModelElement(grammarAccess.getSystemRequirementRule());
            	    	      							}
            	    	      						
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      							newCompositeNode(grammarAccess.getSystemRequirementAccess().getCategoryCategoryCrossReference_5_0_1_0());
            	    	      						
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_42);
            	    	    ruleQualifiedName();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      							afterParserOrEnumRuleCall();
            	    	      						
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt68 >= 1 ) break loop68;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(68, input);
            	                throw eee;
            	        }
            	        cnt68++;
            	    } while (true);


            	    }


            	    }
            	    break;
            	case 2 :
            	    // InternalReqSpec.g:2830:4: ( (lv_description_9_0= ruleDescription ) )
            	    {
            	    // InternalReqSpec.g:2830:4: ( (lv_description_9_0= ruleDescription ) )
            	    // InternalReqSpec.g:2831:5: (lv_description_9_0= ruleDescription )
            	    {
            	    // InternalReqSpec.g:2831:5: (lv_description_9_0= ruleDescription )
            	    // InternalReqSpec.g:2832:6: lv_description_9_0= ruleDescription
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getSystemRequirementAccess().getDescriptionDescriptionParserRuleCall_5_1_0());
            	      					
            	    }
            	    pushFollow(FollowSets000.FOLLOW_41);
            	    lv_description_9_0=ruleDescription();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getSystemRequirementRule());
            	      						}
            	      						set(
            	      							current,
            	      							"description",
            	      							lv_description_9_0,
            	      							"org.osate.alisa.common.Common.Description");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;
            	case 3 :
            	    // InternalReqSpec.g:2850:4: ( (lv_whencondition_10_0= ruleWhenCondition ) )
            	    {
            	    // InternalReqSpec.g:2850:4: ( (lv_whencondition_10_0= ruleWhenCondition ) )
            	    // InternalReqSpec.g:2851:5: (lv_whencondition_10_0= ruleWhenCondition )
            	    {
            	    // InternalReqSpec.g:2851:5: (lv_whencondition_10_0= ruleWhenCondition )
            	    // InternalReqSpec.g:2852:6: lv_whencondition_10_0= ruleWhenCondition
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getSystemRequirementAccess().getWhenconditionWhenConditionParserRuleCall_5_2_0());
            	      					
            	    }
            	    pushFollow(FollowSets000.FOLLOW_41);
            	    lv_whencondition_10_0=ruleWhenCondition();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getSystemRequirementRule());
            	      						}
            	      						set(
            	      							current,
            	      							"whencondition",
            	      							lv_whencondition_10_0,
            	      							"org.osate.reqspec.ReqSpec.WhenCondition");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;
            	case 4 :
            	    // InternalReqSpec.g:2870:4: ( (lv_predicate_11_0= ruleReqPredicate ) )
            	    {
            	    // InternalReqSpec.g:2870:4: ( (lv_predicate_11_0= ruleReqPredicate ) )
            	    // InternalReqSpec.g:2871:5: (lv_predicate_11_0= ruleReqPredicate )
            	    {
            	    // InternalReqSpec.g:2871:5: (lv_predicate_11_0= ruleReqPredicate )
            	    // InternalReqSpec.g:2872:6: lv_predicate_11_0= ruleReqPredicate
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getSystemRequirementAccess().getPredicateReqPredicateParserRuleCall_5_3_0());
            	      					
            	    }
            	    pushFollow(FollowSets000.FOLLOW_41);
            	    lv_predicate_11_0=ruleReqPredicate();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getSystemRequirementRule());
            	      						}
            	      						set(
            	      							current,
            	      							"predicate",
            	      							lv_predicate_11_0,
            	      							"org.osate.reqspec.ReqSpec.ReqPredicate");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;
            	case 5 :
            	    // InternalReqSpec.g:2890:4: ( (lv_rationale_12_0= ruleRationale ) )
            	    {
            	    // InternalReqSpec.g:2890:4: ( (lv_rationale_12_0= ruleRationale ) )
            	    // InternalReqSpec.g:2891:5: (lv_rationale_12_0= ruleRationale )
            	    {
            	    // InternalReqSpec.g:2891:5: (lv_rationale_12_0= ruleRationale )
            	    // InternalReqSpec.g:2892:6: lv_rationale_12_0= ruleRationale
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getSystemRequirementAccess().getRationaleRationaleParserRuleCall_5_4_0());
            	      					
            	    }
            	    pushFollow(FollowSets000.FOLLOW_41);
            	    lv_rationale_12_0=ruleRationale();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getSystemRequirementRule());
            	      						}
            	      						set(
            	      							current,
            	      							"rationale",
            	      							lv_rationale_12_0,
            	      							"org.osate.alisa.common.Common.Rationale");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;
            	case 6 :
            	    // InternalReqSpec.g:2910:4: ( (lv_changeUncertainty_13_0= ruleUncertainty ) )
            	    {
            	    // InternalReqSpec.g:2910:4: ( (lv_changeUncertainty_13_0= ruleUncertainty ) )
            	    // InternalReqSpec.g:2911:5: (lv_changeUncertainty_13_0= ruleUncertainty )
            	    {
            	    // InternalReqSpec.g:2911:5: (lv_changeUncertainty_13_0= ruleUncertainty )
            	    // InternalReqSpec.g:2912:6: lv_changeUncertainty_13_0= ruleUncertainty
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getSystemRequirementAccess().getChangeUncertaintyUncertaintyParserRuleCall_5_5_0());
            	      					
            	    }
            	    pushFollow(FollowSets000.FOLLOW_41);
            	    lv_changeUncertainty_13_0=ruleUncertainty();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getSystemRequirementRule());
            	      						}
            	      						set(
            	      							current,
            	      							"changeUncertainty",
            	      							lv_changeUncertainty_13_0,
            	      							"org.osate.alisa.common.Common.Uncertainty");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;
            	case 7 :
            	    // InternalReqSpec.g:2930:4: (otherlv_14= 'mitigates' ( ( (otherlv_15= RULE_ID ) ) | ( (lv_exceptionText_16_0= RULE_STRING ) ) ) )
            	    {
            	    // InternalReqSpec.g:2930:4: (otherlv_14= 'mitigates' ( ( (otherlv_15= RULE_ID ) ) | ( (lv_exceptionText_16_0= RULE_STRING ) ) ) )
            	    // InternalReqSpec.g:2931:5: otherlv_14= 'mitigates' ( ( (otherlv_15= RULE_ID ) ) | ( (lv_exceptionText_16_0= RULE_STRING ) ) )
            	    {
            	    otherlv_14=(Token)match(input,40,FollowSets000.FOLLOW_24); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					newLeafNode(otherlv_14, grammarAccess.getSystemRequirementAccess().getMitigatesKeyword_5_6_0());
            	      				
            	    }
            	    // InternalReqSpec.g:2935:5: ( ( (otherlv_15= RULE_ID ) ) | ( (lv_exceptionText_16_0= RULE_STRING ) ) )
            	    int alt69=2;
            	    int LA69_0 = input.LA(1);

            	    if ( (LA69_0==RULE_ID) ) {
            	        alt69=1;
            	    }
            	    else if ( (LA69_0==RULE_STRING) ) {
            	        alt69=2;
            	    }
            	    else {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 69, 0, input);

            	        throw nvae;
            	    }
            	    switch (alt69) {
            	        case 1 :
            	            // InternalReqSpec.g:2936:6: ( (otherlv_15= RULE_ID ) )
            	            {
            	            // InternalReqSpec.g:2936:6: ( (otherlv_15= RULE_ID ) )
            	            // InternalReqSpec.g:2937:7: (otherlv_15= RULE_ID )
            	            {
            	            // InternalReqSpec.g:2937:7: (otherlv_15= RULE_ID )
            	            // InternalReqSpec.g:2938:8: otherlv_15= RULE_ID
            	            {
            	            if ( state.backtracking==0 ) {

            	              								if (current==null) {
            	              									current = createModelElement(grammarAccess.getSystemRequirementRule());
            	              								}
            	              							
            	            }
            	            otherlv_15=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_41); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              								newLeafNode(otherlv_15, grammarAccess.getSystemRequirementAccess().getExceptionEObjectCrossReference_5_6_1_0_0());
            	              							
            	            }

            	            }


            	            }


            	            }
            	            break;
            	        case 2 :
            	            // InternalReqSpec.g:2950:6: ( (lv_exceptionText_16_0= RULE_STRING ) )
            	            {
            	            // InternalReqSpec.g:2950:6: ( (lv_exceptionText_16_0= RULE_STRING ) )
            	            // InternalReqSpec.g:2951:7: (lv_exceptionText_16_0= RULE_STRING )
            	            {
            	            // InternalReqSpec.g:2951:7: (lv_exceptionText_16_0= RULE_STRING )
            	            // InternalReqSpec.g:2952:8: lv_exceptionText_16_0= RULE_STRING
            	            {
            	            lv_exceptionText_16_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_41); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              								newLeafNode(lv_exceptionText_16_0, grammarAccess.getSystemRequirementAccess().getExceptionTextSTRINGTerminalRuleCall_5_6_1_1_0());
            	              							
            	            }
            	            if ( state.backtracking==0 ) {

            	              								if (current==null) {
            	              									current = createModelElement(grammarAccess.getSystemRequirementRule());
            	              								}
            	              								setWithLastConsumed(
            	              									current,
            	              									"exceptionText",
            	              									lv_exceptionText_16_0,
            	              									"org.eclipse.xtext.common.Terminals.STRING");
            	              							
            	            }

            	            }


            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }
            	    break;
            	case 8 :
            	    // InternalReqSpec.g:2971:4: (otherlv_17= 'inherits' ( ( ruleQualifiedName ) ) )
            	    {
            	    // InternalReqSpec.g:2971:4: (otherlv_17= 'inherits' ( ( ruleQualifiedName ) ) )
            	    // InternalReqSpec.g:2972:5: otherlv_17= 'inherits' ( ( ruleQualifiedName ) )
            	    {
            	    otherlv_17=(Token)match(input,41,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					newLeafNode(otherlv_17, grammarAccess.getSystemRequirementAccess().getInheritsKeyword_5_7_0());
            	      				
            	    }
            	    // InternalReqSpec.g:2976:5: ( ( ruleQualifiedName ) )
            	    // InternalReqSpec.g:2977:6: ( ruleQualifiedName )
            	    {
            	    // InternalReqSpec.g:2977:6: ( ruleQualifiedName )
            	    // InternalReqSpec.g:2978:7: ruleQualifiedName
            	    {
            	    if ( state.backtracking==0 ) {

            	      							if (current==null) {
            	      								current = createModelElement(grammarAccess.getSystemRequirementRule());
            	      							}
            	      						
            	    }
            	    if ( state.backtracking==0 ) {

            	      							newCompositeNode(grammarAccess.getSystemRequirementAccess().getInheritsReferenceRequirementCrossReference_5_7_1_0());
            	      						
            	    }
            	    pushFollow(FollowSets000.FOLLOW_41);
            	    ruleQualifiedName();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      							afterParserOrEnumRuleCall();
            	      						
            	    }

            	    }


            	    }


            	    }


            	    }
            	    break;
            	case 9 :
            	    // InternalReqSpec.g:2994:4: ( ( (lv_dropped_19_0= 'dropped' ) ) ( (lv_dropRationale_20_0= RULE_STRING ) )? )
            	    {
            	    // InternalReqSpec.g:2994:4: ( ( (lv_dropped_19_0= 'dropped' ) ) ( (lv_dropRationale_20_0= RULE_STRING ) )? )
            	    // InternalReqSpec.g:2995:5: ( (lv_dropped_19_0= 'dropped' ) ) ( (lv_dropRationale_20_0= RULE_STRING ) )?
            	    {
            	    // InternalReqSpec.g:2995:5: ( (lv_dropped_19_0= 'dropped' ) )
            	    // InternalReqSpec.g:2996:6: (lv_dropped_19_0= 'dropped' )
            	    {
            	    // InternalReqSpec.g:2996:6: (lv_dropped_19_0= 'dropped' )
            	    // InternalReqSpec.g:2997:7: lv_dropped_19_0= 'dropped'
            	    {
            	    lv_dropped_19_0=(Token)match(input,38,FollowSets000.FOLLOW_43); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      							newLeafNode(lv_dropped_19_0, grammarAccess.getSystemRequirementAccess().getDroppedDroppedKeyword_5_8_0_0());
            	      						
            	    }
            	    if ( state.backtracking==0 ) {

            	      							if (current==null) {
            	      								current = createModelElement(grammarAccess.getSystemRequirementRule());
            	      							}
            	      							setWithLastConsumed(current, "dropped", true, "dropped");
            	      						
            	    }

            	    }


            	    }

            	    // InternalReqSpec.g:3009:5: ( (lv_dropRationale_20_0= RULE_STRING ) )?
            	    int alt70=2;
            	    int LA70_0 = input.LA(1);

            	    if ( (LA70_0==RULE_STRING) ) {
            	        alt70=1;
            	    }
            	    switch (alt70) {
            	        case 1 :
            	            // InternalReqSpec.g:3010:6: (lv_dropRationale_20_0= RULE_STRING )
            	            {
            	            // InternalReqSpec.g:3010:6: (lv_dropRationale_20_0= RULE_STRING )
            	            // InternalReqSpec.g:3011:7: lv_dropRationale_20_0= RULE_STRING
            	            {
            	            lv_dropRationale_20_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_41); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              							newLeafNode(lv_dropRationale_20_0, grammarAccess.getSystemRequirementAccess().getDropRationaleSTRINGTerminalRuleCall_5_8_1_0());
            	              						
            	            }
            	            if ( state.backtracking==0 ) {

            	              							if (current==null) {
            	              								current = createModelElement(grammarAccess.getSystemRequirementRule());
            	              							}
            	              							setWithLastConsumed(
            	              								current,
            	              								"dropRationale",
            	              								lv_dropRationale_20_0,
            	              								"org.eclipse.xtext.common.Terminals.STRING");
            	              						
            	            }

            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }
            	    break;
            	case 10 :
            	    // InternalReqSpec.g:3029:4: ( (lv_constants_21_0= ruleValDeclaration ) )
            	    {
            	    // InternalReqSpec.g:3029:4: ( (lv_constants_21_0= ruleValDeclaration ) )
            	    // InternalReqSpec.g:3030:5: (lv_constants_21_0= ruleValDeclaration )
            	    {
            	    // InternalReqSpec.g:3030:5: (lv_constants_21_0= ruleValDeclaration )
            	    // InternalReqSpec.g:3031:6: lv_constants_21_0= ruleValDeclaration
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getSystemRequirementAccess().getConstantsValDeclarationParserRuleCall_5_9_0());
            	      					
            	    }
            	    pushFollow(FollowSets000.FOLLOW_41);
            	    lv_constants_21_0=ruleValDeclaration();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getSystemRequirementRule());
            	      						}
            	      						add(
            	      							current,
            	      							"constants",
            	      							lv_constants_21_0,
            	      							"org.osate.reqspec.ReqSpec.ValDeclaration");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;
            	case 11 :
            	    // InternalReqSpec.g:3049:4: ( (lv_computes_22_0= ruleComputeDeclaration ) )
            	    {
            	    // InternalReqSpec.g:3049:4: ( (lv_computes_22_0= ruleComputeDeclaration ) )
            	    // InternalReqSpec.g:3050:5: (lv_computes_22_0= ruleComputeDeclaration )
            	    {
            	    // InternalReqSpec.g:3050:5: (lv_computes_22_0= ruleComputeDeclaration )
            	    // InternalReqSpec.g:3051:6: lv_computes_22_0= ruleComputeDeclaration
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getSystemRequirementAccess().getComputesComputeDeclarationParserRuleCall_5_10_0());
            	      					
            	    }
            	    pushFollow(FollowSets000.FOLLOW_41);
            	    lv_computes_22_0=ruleComputeDeclaration();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getSystemRequirementRule());
            	      						}
            	      						add(
            	      							current,
            	      							"computes",
            	      							lv_computes_22_0,
            	      							"org.osate.alisa.common.Common.ComputeDeclaration");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;
            	case 12 :
            	    // InternalReqSpec.g:3069:4: (otherlv_23= 'refines' ( ( ruleQualifiedName ) )+ )
            	    {
            	    // InternalReqSpec.g:3069:4: (otherlv_23= 'refines' ( ( ruleQualifiedName ) )+ )
            	    // InternalReqSpec.g:3070:5: otherlv_23= 'refines' ( ( ruleQualifiedName ) )+
            	    {
            	    otherlv_23=(Token)match(input,34,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					newLeafNode(otherlv_23, grammarAccess.getSystemRequirementAccess().getRefinesKeyword_5_11_0());
            	      				
            	    }
            	    // InternalReqSpec.g:3074:5: ( ( ruleQualifiedName ) )+
            	    int cnt71=0;
            	    loop71:
            	    do {
            	        int alt71=2;
            	        int LA71_0 = input.LA(1);

            	        if ( (LA71_0==RULE_ID) ) {
            	            alt71=1;
            	        }


            	        switch (alt71) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:3075:6: ( ruleQualifiedName )
            	    	    {
            	    	    // InternalReqSpec.g:3075:6: ( ruleQualifiedName )
            	    	    // InternalReqSpec.g:3076:7: ruleQualifiedName
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      							if (current==null) {
            	    	      								current = createModelElement(grammarAccess.getSystemRequirementRule());
            	    	      							}
            	    	      						
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      							newCompositeNode(grammarAccess.getSystemRequirementAccess().getRefinesReferenceRequirementCrossReference_5_11_1_0());
            	    	      						
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_42);
            	    	    ruleQualifiedName();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      							afterParserOrEnumRuleCall();
            	    	      						
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt71 >= 1 ) break loop71;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(71, input);
            	                throw eee;
            	        }
            	        cnt71++;
            	    } while (true);


            	    }


            	    }
            	    break;
            	case 13 :
            	    // InternalReqSpec.g:3092:4: (otherlv_25= 'decomposes' ( ( ruleQualifiedName ) )+ )
            	    {
            	    // InternalReqSpec.g:3092:4: (otherlv_25= 'decomposes' ( ( ruleQualifiedName ) )+ )
            	    // InternalReqSpec.g:3093:5: otherlv_25= 'decomposes' ( ( ruleQualifiedName ) )+
            	    {
            	    otherlv_25=(Token)match(input,42,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					newLeafNode(otherlv_25, grammarAccess.getSystemRequirementAccess().getDecomposesKeyword_5_12_0());
            	      				
            	    }
            	    // InternalReqSpec.g:3097:5: ( ( ruleQualifiedName ) )+
            	    int cnt72=0;
            	    loop72:
            	    do {
            	        int alt72=2;
            	        int LA72_0 = input.LA(1);

            	        if ( (LA72_0==RULE_ID) ) {
            	            alt72=1;
            	        }


            	        switch (alt72) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:3098:6: ( ruleQualifiedName )
            	    	    {
            	    	    // InternalReqSpec.g:3098:6: ( ruleQualifiedName )
            	    	    // InternalReqSpec.g:3099:7: ruleQualifiedName
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      							if (current==null) {
            	    	      								current = createModelElement(grammarAccess.getSystemRequirementRule());
            	    	      							}
            	    	      						
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      							newCompositeNode(grammarAccess.getSystemRequirementAccess().getDecomposesReferenceRequirementCrossReference_5_12_1_0());
            	    	      						
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_42);
            	    	    ruleQualifiedName();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      							afterParserOrEnumRuleCall();
            	    	      						
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt72 >= 1 ) break loop72;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(72, input);
            	                throw eee;
            	        }
            	        cnt72++;
            	    } while (true);


            	    }


            	    }
            	    break;
            	case 14 :
            	    // InternalReqSpec.g:3115:4: (otherlv_27= 'evolves' ( ( ruleQualifiedName ) )+ )
            	    {
            	    // InternalReqSpec.g:3115:4: (otherlv_27= 'evolves' ( ( ruleQualifiedName ) )+ )
            	    // InternalReqSpec.g:3116:5: otherlv_27= 'evolves' ( ( ruleQualifiedName ) )+
            	    {
            	    otherlv_27=(Token)match(input,37,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					newLeafNode(otherlv_27, grammarAccess.getSystemRequirementAccess().getEvolvesKeyword_5_13_0());
            	      				
            	    }
            	    // InternalReqSpec.g:3120:5: ( ( ruleQualifiedName ) )+
            	    int cnt73=0;
            	    loop73:
            	    do {
            	        int alt73=2;
            	        int LA73_0 = input.LA(1);

            	        if ( (LA73_0==RULE_ID) ) {
            	            alt73=1;
            	        }


            	        switch (alt73) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:3121:6: ( ruleQualifiedName )
            	    	    {
            	    	    // InternalReqSpec.g:3121:6: ( ruleQualifiedName )
            	    	    // InternalReqSpec.g:3122:7: ruleQualifiedName
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      							if (current==null) {
            	    	      								current = createModelElement(grammarAccess.getSystemRequirementRule());
            	    	      							}
            	    	      						
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      							newCompositeNode(grammarAccess.getSystemRequirementAccess().getEvolvesReferenceRequirementCrossReference_5_13_1_0());
            	    	      						
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_42);
            	    	    ruleQualifiedName();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      							afterParserOrEnumRuleCall();
            	    	      						
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt73 >= 1 ) break loop73;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(73, input);
            	                throw eee;
            	        }
            	        cnt73++;
            	    } while (true);


            	    }


            	    }
            	    break;
            	case 15 :
            	    // InternalReqSpec.g:3138:4: (otherlv_29= 'development' otherlv_30= 'stakeholder' ( ( ruleQualifiedName ) )+ )
            	    {
            	    // InternalReqSpec.g:3138:4: (otherlv_29= 'development' otherlv_30= 'stakeholder' ( ( ruleQualifiedName ) )+ )
            	    // InternalReqSpec.g:3139:5: otherlv_29= 'development' otherlv_30= 'stakeholder' ( ( ruleQualifiedName ) )+
            	    {
            	    otherlv_29=(Token)match(input,43,FollowSets000.FOLLOW_44); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					newLeafNode(otherlv_29, grammarAccess.getSystemRequirementAccess().getDevelopmentKeyword_5_14_0());
            	      				
            	    }
            	    otherlv_30=(Token)match(input,20,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					newLeafNode(otherlv_30, grammarAccess.getSystemRequirementAccess().getStakeholderKeyword_5_14_1());
            	      				
            	    }
            	    // InternalReqSpec.g:3147:5: ( ( ruleQualifiedName ) )+
            	    int cnt74=0;
            	    loop74:
            	    do {
            	        int alt74=2;
            	        int LA74_0 = input.LA(1);

            	        if ( (LA74_0==RULE_ID) ) {
            	            alt74=1;
            	        }


            	        switch (alt74) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:3148:6: ( ruleQualifiedName )
            	    	    {
            	    	    // InternalReqSpec.g:3148:6: ( ruleQualifiedName )
            	    	    // InternalReqSpec.g:3149:7: ruleQualifiedName
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      							if (current==null) {
            	    	      								current = createModelElement(grammarAccess.getSystemRequirementRule());
            	    	      							}
            	    	      						
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      							newCompositeNode(grammarAccess.getSystemRequirementAccess().getDevelopmentStakeholderStakeholderCrossReference_5_14_2_0());
            	    	      						
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_42);
            	    	    ruleQualifiedName();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      							afterParserOrEnumRuleCall();
            	    	      						
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt74 >= 1 ) break loop74;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(74, input);
            	                throw eee;
            	        }
            	        cnt74++;
            	    } while (true);


            	    }


            	    }
            	    break;
            	case 16 :
            	    // InternalReqSpec.g:3165:4: (otherlv_32= 'see' otherlv_33= 'goal' ( ( ruleQualifiedName ) )+ )
            	    {
            	    // InternalReqSpec.g:3165:4: (otherlv_32= 'see' otherlv_33= 'goal' ( ( ruleQualifiedName ) )+ )
            	    // InternalReqSpec.g:3166:5: otherlv_32= 'see' otherlv_33= 'goal' ( ( ruleQualifiedName ) )+
            	    {
            	    otherlv_32=(Token)match(input,25,FollowSets000.FOLLOW_40); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					newLeafNode(otherlv_32, grammarAccess.getSystemRequirementAccess().getSeeKeyword_5_15_0());
            	      				
            	    }
            	    otherlv_33=(Token)match(input,32,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					newLeafNode(otherlv_33, grammarAccess.getSystemRequirementAccess().getGoalKeyword_5_15_1());
            	      				
            	    }
            	    // InternalReqSpec.g:3174:5: ( ( ruleQualifiedName ) )+
            	    int cnt75=0;
            	    loop75:
            	    do {
            	        int alt75=2;
            	        int LA75_0 = input.LA(1);

            	        if ( (LA75_0==RULE_ID) ) {
            	            alt75=1;
            	        }


            	        switch (alt75) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:3175:6: ( ruleQualifiedName )
            	    	    {
            	    	    // InternalReqSpec.g:3175:6: ( ruleQualifiedName )
            	    	    // InternalReqSpec.g:3176:7: ruleQualifiedName
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      							if (current==null) {
            	    	      								current = createModelElement(grammarAccess.getSystemRequirementRule());
            	    	      							}
            	    	      						
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      							newCompositeNode(grammarAccess.getSystemRequirementAccess().getGoalReferenceGoalCrossReference_5_15_2_0());
            	    	      						
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_42);
            	    	    ruleQualifiedName();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      							afterParserOrEnumRuleCall();
            	    	      						
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt75 >= 1 ) break loop75;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(75, input);
            	                throw eee;
            	        }
            	        cnt75++;
            	    } while (true);


            	    }


            	    }
            	    break;
            	case 17 :
            	    // InternalReqSpec.g:3192:4: (otherlv_35= 'see' otherlv_36= 'requirement' ( ( ruleQualifiedName ) )+ )
            	    {
            	    // InternalReqSpec.g:3192:4: (otherlv_35= 'see' otherlv_36= 'requirement' ( ( ruleQualifiedName ) )+ )
            	    // InternalReqSpec.g:3193:5: otherlv_35= 'see' otherlv_36= 'requirement' ( ( ruleQualifiedName ) )+
            	    {
            	    otherlv_35=(Token)match(input,25,FollowSets000.FOLLOW_45); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					newLeafNode(otherlv_35, grammarAccess.getSystemRequirementAccess().getSeeKeyword_5_16_0());
            	      				
            	    }
            	    otherlv_36=(Token)match(input,39,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					newLeafNode(otherlv_36, grammarAccess.getSystemRequirementAccess().getRequirementKeyword_5_16_1());
            	      				
            	    }
            	    // InternalReqSpec.g:3201:5: ( ( ruleQualifiedName ) )+
            	    int cnt76=0;
            	    loop76:
            	    do {
            	        int alt76=2;
            	        int LA76_0 = input.LA(1);

            	        if ( (LA76_0==RULE_ID) ) {
            	            alt76=1;
            	        }


            	        switch (alt76) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:3202:6: ( ruleQualifiedName )
            	    	    {
            	    	    // InternalReqSpec.g:3202:6: ( ruleQualifiedName )
            	    	    // InternalReqSpec.g:3203:7: ruleQualifiedName
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      							if (current==null) {
            	    	      								current = createModelElement(grammarAccess.getSystemRequirementRule());
            	    	      							}
            	    	      						
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      							newCompositeNode(grammarAccess.getSystemRequirementAccess().getRequirementReferenceRequirementCrossReference_5_16_2_0());
            	    	      						
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_42);
            	    	    ruleQualifiedName();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      							afterParserOrEnumRuleCall();
            	    	      						
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt76 >= 1 ) break loop76;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(76, input);
            	                throw eee;
            	        }
            	        cnt76++;
            	    } while (true);


            	    }


            	    }
            	    break;
            	case 18 :
            	    // InternalReqSpec.g:3219:4: (otherlv_38= 'see' otherlv_39= 'document' ( (lv_docReference_40_0= ruleExternalDocument ) )+ )
            	    {
            	    // InternalReqSpec.g:3219:4: (otherlv_38= 'see' otherlv_39= 'document' ( (lv_docReference_40_0= ruleExternalDocument ) )+ )
            	    // InternalReqSpec.g:3220:5: otherlv_38= 'see' otherlv_39= 'document' ( (lv_docReference_40_0= ruleExternalDocument ) )+
            	    {
            	    otherlv_38=(Token)match(input,25,FollowSets000.FOLLOW_17); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					newLeafNode(otherlv_38, grammarAccess.getSystemRequirementAccess().getSeeKeyword_5_17_0());
            	      				
            	    }
            	    otherlv_39=(Token)match(input,26,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					newLeafNode(otherlv_39, grammarAccess.getSystemRequirementAccess().getDocumentKeyword_5_17_1());
            	      				
            	    }
            	    // InternalReqSpec.g:3228:5: ( (lv_docReference_40_0= ruleExternalDocument ) )+
            	    int cnt77=0;
            	    loop77:
            	    do {
            	        int alt77=2;
            	        int LA77_0 = input.LA(1);

            	        if ( (LA77_0==RULE_ID) ) {
            	            alt77=1;
            	        }


            	        switch (alt77) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:3229:6: (lv_docReference_40_0= ruleExternalDocument )
            	    	    {
            	    	    // InternalReqSpec.g:3229:6: (lv_docReference_40_0= ruleExternalDocument )
            	    	    // InternalReqSpec.g:3230:7: lv_docReference_40_0= ruleExternalDocument
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      							newCompositeNode(grammarAccess.getSystemRequirementAccess().getDocReferenceExternalDocumentParserRuleCall_5_17_2_0());
            	    	      						
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_42);
            	    	    lv_docReference_40_0=ruleExternalDocument();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      							if (current==null) {
            	    	      								current = createModelElementForParent(grammarAccess.getSystemRequirementRule());
            	    	      							}
            	    	      							add(
            	    	      								current,
            	    	      								"docReference",
            	    	      								lv_docReference_40_0,
            	    	      								"org.osate.reqspec.ReqSpec.ExternalDocument");
            	    	      							afterParserOrEnumRuleCall();
            	    	      						
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt77 >= 1 ) break loop77;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(77, input);
            	                throw eee;
            	        }
            	        cnt77++;
            	    } while (true);


            	    }


            	    }
            	    break;
            	case 19 :
            	    // InternalReqSpec.g:3249:4: (otherlv_41= 'issues' ( (lv_issues_42_0= RULE_STRING ) )+ )
            	    {
            	    // InternalReqSpec.g:3249:4: (otherlv_41= 'issues' ( (lv_issues_42_0= RULE_STRING ) )+ )
            	    // InternalReqSpec.g:3250:5: otherlv_41= 'issues' ( (lv_issues_42_0= RULE_STRING ) )+
            	    {
            	    otherlv_41=(Token)match(input,27,FollowSets000.FOLLOW_9); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					newLeafNode(otherlv_41, grammarAccess.getSystemRequirementAccess().getIssuesKeyword_5_18_0());
            	      				
            	    }
            	    // InternalReqSpec.g:3254:5: ( (lv_issues_42_0= RULE_STRING ) )+
            	    int cnt78=0;
            	    loop78:
            	    do {
            	        int alt78=2;
            	        int LA78_0 = input.LA(1);

            	        if ( (LA78_0==RULE_STRING) ) {
            	            alt78=1;
            	        }


            	        switch (alt78) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:3255:6: (lv_issues_42_0= RULE_STRING )
            	    	    {
            	    	    // InternalReqSpec.g:3255:6: (lv_issues_42_0= RULE_STRING )
            	    	    // InternalReqSpec.g:3256:7: lv_issues_42_0= RULE_STRING
            	    	    {
            	    	    lv_issues_42_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_43); if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      							newLeafNode(lv_issues_42_0, grammarAccess.getSystemRequirementAccess().getIssuesSTRINGTerminalRuleCall_5_18_1_0());
            	    	      						
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      							if (current==null) {
            	    	      								current = createModelElement(grammarAccess.getSystemRequirementRule());
            	    	      							}
            	    	      							addWithLastConsumed(
            	    	      								current,
            	    	      								"issues",
            	    	      								lv_issues_42_0,
            	    	      								"org.eclipse.xtext.common.Terminals.STRING");
            	    	      						
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt78 >= 1 ) break loop78;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(78, input);
            	                throw eee;
            	        }
            	        cnt78++;
            	    } while (true);


            	    }


            	    }
            	    break;

            	default :
            	    break loop79;
                }
            } while (true);

            otherlv_43=(Token)match(input,19,FollowSets000.FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_43, grammarAccess.getSystemRequirementAccess().getRightSquareBracketKeyword_6());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSystemRequirement"


    // $ANTLR start "entryRuleGlobalRequirement"
    // InternalReqSpec.g:3282:1: entryRuleGlobalRequirement returns [EObject current=null] : iv_ruleGlobalRequirement= ruleGlobalRequirement EOF ;
    public final EObject entryRuleGlobalRequirement() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleGlobalRequirement = null;


        try {
            // InternalReqSpec.g:3282:58: (iv_ruleGlobalRequirement= ruleGlobalRequirement EOF )
            // InternalReqSpec.g:3283:2: iv_ruleGlobalRequirement= ruleGlobalRequirement EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getGlobalRequirementRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleGlobalRequirement=ruleGlobalRequirement();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleGlobalRequirement; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleGlobalRequirement"


    // $ANTLR start "ruleGlobalRequirement"
    // InternalReqSpec.g:3289:1: ruleGlobalRequirement returns [EObject current=null] : (otherlv_0= 'requirement' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? (otherlv_4= 'for' ( ( (lv_componentCategory_5_0= ruleComponentCategory ) )+ | ( (lv_targetType_6_0= ruleTargetType ) ) ) )? otherlv_7= '[' ( ( ( ( ({...}? => ( ({...}? => (otherlv_9= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_11_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_12_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_computes_13_0= ruleComputeDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_predicate_15_0= ruleReqPredicate ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_16_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_17_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_18= 'mitigates' ( ( (otherlv_19= RULE_ID ) ) | ( (lv_exceptionText_20_0= RULE_STRING ) ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_21= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'decomposes' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_27_0= 'dropped' ) ) ( (lv_dropRationale_28_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'development' otherlv_30= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'see' otherlv_33= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'see' otherlv_36= 'requirement' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'see' otherlv_39= 'document' ( (lv_docReference_40_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'issues' ( (lv_issues_42_0= RULE_STRING ) )+ ) ) ) ) )* ) ) ) otherlv_43= ']' ) ;
    public final EObject ruleGlobalRequirement() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token lv_title_3_0=null;
        Token otherlv_4=null;
        Token otherlv_7=null;
        Token otherlv_9=null;
        Token otherlv_18=null;
        Token otherlv_19=null;
        Token lv_exceptionText_20_0=null;
        Token otherlv_21=null;
        Token otherlv_23=null;
        Token otherlv_25=null;
        Token lv_dropped_27_0=null;
        Token lv_dropRationale_28_0=null;
        Token otherlv_29=null;
        Token otherlv_30=null;
        Token otherlv_32=null;
        Token otherlv_33=null;
        Token otherlv_35=null;
        Token otherlv_36=null;
        Token otherlv_38=null;
        Token otherlv_39=null;
        Token otherlv_41=null;
        Token lv_issues_42_0=null;
        Token otherlv_43=null;
        AntlrDatatypeRuleToken lv_componentCategory_5_0 = null;

        Enumerator lv_targetType_6_0 = null;

        EObject lv_description_11_0 = null;

        EObject lv_constants_12_0 = null;

        EObject lv_computes_13_0 = null;

        EObject lv_whencondition_14_0 = null;

        EObject lv_predicate_15_0 = null;

        EObject lv_rationale_16_0 = null;

        EObject lv_changeUncertainty_17_0 = null;

        EObject lv_docReference_40_0 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:3295:2: ( (otherlv_0= 'requirement' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? (otherlv_4= 'for' ( ( (lv_componentCategory_5_0= ruleComponentCategory ) )+ | ( (lv_targetType_6_0= ruleTargetType ) ) ) )? otherlv_7= '[' ( ( ( ( ({...}? => ( ({...}? => (otherlv_9= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_11_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_12_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_computes_13_0= ruleComputeDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_predicate_15_0= ruleReqPredicate ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_16_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_17_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_18= 'mitigates' ( ( (otherlv_19= RULE_ID ) ) | ( (lv_exceptionText_20_0= RULE_STRING ) ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_21= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'decomposes' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_27_0= 'dropped' ) ) ( (lv_dropRationale_28_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'development' otherlv_30= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'see' otherlv_33= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'see' otherlv_36= 'requirement' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'see' otherlv_39= 'document' ( (lv_docReference_40_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'issues' ( (lv_issues_42_0= RULE_STRING ) )+ ) ) ) ) )* ) ) ) otherlv_43= ']' ) )
            // InternalReqSpec.g:3296:2: (otherlv_0= 'requirement' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? (otherlv_4= 'for' ( ( (lv_componentCategory_5_0= ruleComponentCategory ) )+ | ( (lv_targetType_6_0= ruleTargetType ) ) ) )? otherlv_7= '[' ( ( ( ( ({...}? => ( ({...}? => (otherlv_9= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_11_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_12_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_computes_13_0= ruleComputeDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_predicate_15_0= ruleReqPredicate ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_16_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_17_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_18= 'mitigates' ( ( (otherlv_19= RULE_ID ) ) | ( (lv_exceptionText_20_0= RULE_STRING ) ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_21= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'decomposes' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_27_0= 'dropped' ) ) ( (lv_dropRationale_28_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'development' otherlv_30= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'see' otherlv_33= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'see' otherlv_36= 'requirement' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'see' otherlv_39= 'document' ( (lv_docReference_40_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'issues' ( (lv_issues_42_0= RULE_STRING ) )+ ) ) ) ) )* ) ) ) otherlv_43= ']' )
            {
            // InternalReqSpec.g:3296:2: (otherlv_0= 'requirement' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? (otherlv_4= 'for' ( ( (lv_componentCategory_5_0= ruleComponentCategory ) )+ | ( (lv_targetType_6_0= ruleTargetType ) ) ) )? otherlv_7= '[' ( ( ( ( ({...}? => ( ({...}? => (otherlv_9= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_11_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_12_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_computes_13_0= ruleComputeDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_predicate_15_0= ruleReqPredicate ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_16_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_17_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_18= 'mitigates' ( ( (otherlv_19= RULE_ID ) ) | ( (lv_exceptionText_20_0= RULE_STRING ) ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_21= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'decomposes' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_27_0= 'dropped' ) ) ( (lv_dropRationale_28_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'development' otherlv_30= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'see' otherlv_33= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'see' otherlv_36= 'requirement' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'see' otherlv_39= 'document' ( (lv_docReference_40_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'issues' ( (lv_issues_42_0= RULE_STRING ) )+ ) ) ) ) )* ) ) ) otherlv_43= ']' )
            // InternalReqSpec.g:3297:3: otherlv_0= 'requirement' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? (otherlv_4= 'for' ( ( (lv_componentCategory_5_0= ruleComponentCategory ) )+ | ( (lv_targetType_6_0= ruleTargetType ) ) ) )? otherlv_7= '[' ( ( ( ( ({...}? => ( ({...}? => (otherlv_9= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_11_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_12_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_computes_13_0= ruleComputeDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_predicate_15_0= ruleReqPredicate ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_16_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_17_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_18= 'mitigates' ( ( (otherlv_19= RULE_ID ) ) | ( (lv_exceptionText_20_0= RULE_STRING ) ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_21= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'decomposes' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_27_0= 'dropped' ) ) ( (lv_dropRationale_28_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'development' otherlv_30= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'see' otherlv_33= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'see' otherlv_36= 'requirement' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'see' otherlv_39= 'document' ( (lv_docReference_40_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'issues' ( (lv_issues_42_0= RULE_STRING ) )+ ) ) ) ) )* ) ) ) otherlv_43= ']'
            {
            otherlv_0=(Token)match(input,39,FollowSets000.FOLLOW_4); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getGlobalRequirementAccess().getRequirementKeyword_0());
              		
            }
            // InternalReqSpec.g:3301:3: ( (lv_name_1_0= RULE_ID ) )
            // InternalReqSpec.g:3302:4: (lv_name_1_0= RULE_ID )
            {
            // InternalReqSpec.g:3302:4: (lv_name_1_0= RULE_ID )
            // InternalReqSpec.g:3303:5: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_34); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_1_0, grammarAccess.getGlobalRequirementAccess().getNameIDTerminalRuleCall_1_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getGlobalRequirementRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_1_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalReqSpec.g:3319:3: (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )?
            int alt80=2;
            int LA80_0 = input.LA(1);

            if ( (LA80_0==22) ) {
                alt80=1;
            }
            switch (alt80) {
                case 1 :
                    // InternalReqSpec.g:3320:4: otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) )
                    {
                    otherlv_2=(Token)match(input,22,FollowSets000.FOLLOW_9); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_2, grammarAccess.getGlobalRequirementAccess().getColonKeyword_2_0());
                      			
                    }
                    // InternalReqSpec.g:3324:4: ( (lv_title_3_0= RULE_STRING ) )
                    // InternalReqSpec.g:3325:5: (lv_title_3_0= RULE_STRING )
                    {
                    // InternalReqSpec.g:3325:5: (lv_title_3_0= RULE_STRING )
                    // InternalReqSpec.g:3326:6: lv_title_3_0= RULE_STRING
                    {
                    lv_title_3_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_35); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_title_3_0, grammarAccess.getGlobalRequirementAccess().getTitleSTRINGTerminalRuleCall_2_1_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getGlobalRequirementRule());
                      						}
                      						setWithLastConsumed(
                      							current,
                      							"title",
                      							lv_title_3_0,
                      							"org.eclipse.xtext.common.Terminals.STRING");
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            // InternalReqSpec.g:3343:3: (otherlv_4= 'for' ( ( (lv_componentCategory_5_0= ruleComponentCategory ) )+ | ( (lv_targetType_6_0= ruleTargetType ) ) ) )?
            int alt83=2;
            int LA83_0 = input.LA(1);

            if ( (LA83_0==23) ) {
                alt83=1;
            }
            switch (alt83) {
                case 1 :
                    // InternalReqSpec.g:3344:4: otherlv_4= 'for' ( ( (lv_componentCategory_5_0= ruleComponentCategory ) )+ | ( (lv_targetType_6_0= ruleTargetType ) ) )
                    {
                    otherlv_4=(Token)match(input,23,FollowSets000.FOLLOW_46); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_4, grammarAccess.getGlobalRequirementAccess().getForKeyword_3_0());
                      			
                    }
                    // InternalReqSpec.g:3348:4: ( ( (lv_componentCategory_5_0= ruleComponentCategory ) )+ | ( (lv_targetType_6_0= ruleTargetType ) ) )
                    int alt82=2;
                    int LA82_0 = input.LA(1);

                    if ( (LA82_0==29||(LA82_0>=108 && LA82_0<=115)||(LA82_0>=117 && LA82_0<=118)) ) {
                        alt82=1;
                    }
                    else if ( (LA82_0==48||LA82_0==79||(LA82_0>=120 && LA82_0<=124)) ) {
                        alt82=2;
                    }
                    else {
                        if (state.backtracking>0) {state.failed=true; return current;}
                        NoViableAltException nvae =
                            new NoViableAltException("", 82, 0, input);

                        throw nvae;
                    }
                    switch (alt82) {
                        case 1 :
                            // InternalReqSpec.g:3349:5: ( (lv_componentCategory_5_0= ruleComponentCategory ) )+
                            {
                            // InternalReqSpec.g:3349:5: ( (lv_componentCategory_5_0= ruleComponentCategory ) )+
                            int cnt81=0;
                            loop81:
                            do {
                                int alt81=2;
                                int LA81_0 = input.LA(1);

                                if ( (LA81_0==29||(LA81_0>=108 && LA81_0<=115)||(LA81_0>=117 && LA81_0<=118)) ) {
                                    alt81=1;
                                }


                                switch (alt81) {
                            	case 1 :
                            	    // InternalReqSpec.g:3350:6: (lv_componentCategory_5_0= ruleComponentCategory )
                            	    {
                            	    // InternalReqSpec.g:3350:6: (lv_componentCategory_5_0= ruleComponentCategory )
                            	    // InternalReqSpec.g:3351:7: lv_componentCategory_5_0= ruleComponentCategory
                            	    {
                            	    if ( state.backtracking==0 ) {

                            	      							newCompositeNode(grammarAccess.getGlobalRequirementAccess().getComponentCategoryComponentCategoryParserRuleCall_3_1_0_0());
                            	      						
                            	    }
                            	    pushFollow(FollowSets000.FOLLOW_47);
                            	    lv_componentCategory_5_0=ruleComponentCategory();

                            	    state._fsp--;
                            	    if (state.failed) return current;
                            	    if ( state.backtracking==0 ) {

                            	      							if (current==null) {
                            	      								current = createModelElementForParent(grammarAccess.getGlobalRequirementRule());
                            	      							}
                            	      							add(
                            	      								current,
                            	      								"componentCategory",
                            	      								lv_componentCategory_5_0,
                            	      								"org.osate.alisa.common.Common.ComponentCategory");
                            	      							afterParserOrEnumRuleCall();
                            	      						
                            	    }

                            	    }


                            	    }
                            	    break;

                            	default :
                            	    if ( cnt81 >= 1 ) break loop81;
                            	    if (state.backtracking>0) {state.failed=true; return current;}
                                        EarlyExitException eee =
                                            new EarlyExitException(81, input);
                                        throw eee;
                                }
                                cnt81++;
                            } while (true);


                            }
                            break;
                        case 2 :
                            // InternalReqSpec.g:3369:5: ( (lv_targetType_6_0= ruleTargetType ) )
                            {
                            // InternalReqSpec.g:3369:5: ( (lv_targetType_6_0= ruleTargetType ) )
                            // InternalReqSpec.g:3370:6: (lv_targetType_6_0= ruleTargetType )
                            {
                            // InternalReqSpec.g:3370:6: (lv_targetType_6_0= ruleTargetType )
                            // InternalReqSpec.g:3371:7: lv_targetType_6_0= ruleTargetType
                            {
                            if ( state.backtracking==0 ) {

                              							newCompositeNode(grammarAccess.getGlobalRequirementAccess().getTargetTypeTargetTypeEnumRuleCall_3_1_1_0());
                              						
                            }
                            pushFollow(FollowSets000.FOLLOW_5);
                            lv_targetType_6_0=ruleTargetType();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							if (current==null) {
                              								current = createModelElementForParent(grammarAccess.getGlobalRequirementRule());
                              							}
                              							set(
                              								current,
                              								"targetType",
                              								lv_targetType_6_0,
                              								"org.osate.alisa.common.Common.TargetType");
                              							afterParserOrEnumRuleCall();
                              						
                            }

                            }


                            }


                            }
                            break;

                    }


                    }
                    break;

            }

            otherlv_7=(Token)match(input,18,FollowSets000.FOLLOW_48); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_7, grammarAccess.getGlobalRequirementAccess().getLeftSquareBracketKeyword_4());
              		
            }
            // InternalReqSpec.g:3394:3: ( ( ( ( ({...}? => ( ({...}? => (otherlv_9= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_11_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_12_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_computes_13_0= ruleComputeDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_predicate_15_0= ruleReqPredicate ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_16_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_17_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_18= 'mitigates' ( ( (otherlv_19= RULE_ID ) ) | ( (lv_exceptionText_20_0= RULE_STRING ) ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_21= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'decomposes' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_27_0= 'dropped' ) ) ( (lv_dropRationale_28_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'development' otherlv_30= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'see' otherlv_33= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'see' otherlv_36= 'requirement' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'see' otherlv_39= 'document' ( (lv_docReference_40_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'issues' ( (lv_issues_42_0= RULE_STRING ) )+ ) ) ) ) )* ) ) )
            // InternalReqSpec.g:3395:4: ( ( ( ({...}? => ( ({...}? => (otherlv_9= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_11_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_12_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_computes_13_0= ruleComputeDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_predicate_15_0= ruleReqPredicate ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_16_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_17_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_18= 'mitigates' ( ( (otherlv_19= RULE_ID ) ) | ( (lv_exceptionText_20_0= RULE_STRING ) ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_21= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'decomposes' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_27_0= 'dropped' ) ) ( (lv_dropRationale_28_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'development' otherlv_30= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'see' otherlv_33= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'see' otherlv_36= 'requirement' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'see' otherlv_39= 'document' ( (lv_docReference_40_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'issues' ( (lv_issues_42_0= RULE_STRING ) )+ ) ) ) ) )* ) )
            {
            // InternalReqSpec.g:3395:4: ( ( ( ({...}? => ( ({...}? => (otherlv_9= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_11_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_12_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_computes_13_0= ruleComputeDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_predicate_15_0= ruleReqPredicate ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_16_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_17_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_18= 'mitigates' ( ( (otherlv_19= RULE_ID ) ) | ( (lv_exceptionText_20_0= RULE_STRING ) ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_21= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'decomposes' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_27_0= 'dropped' ) ) ( (lv_dropRationale_28_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'development' otherlv_30= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'see' otherlv_33= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'see' otherlv_36= 'requirement' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'see' otherlv_39= 'document' ( (lv_docReference_40_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'issues' ( (lv_issues_42_0= RULE_STRING ) )+ ) ) ) ) )* ) )
            // InternalReqSpec.g:3396:5: ( ( ({...}? => ( ({...}? => (otherlv_9= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_11_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_12_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_computes_13_0= ruleComputeDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_predicate_15_0= ruleReqPredicate ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_16_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_17_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_18= 'mitigates' ( ( (otherlv_19= RULE_ID ) ) | ( (lv_exceptionText_20_0= RULE_STRING ) ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_21= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'decomposes' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_27_0= 'dropped' ) ) ( (lv_dropRationale_28_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'development' otherlv_30= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'see' otherlv_33= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'see' otherlv_36= 'requirement' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'see' otherlv_39= 'document' ( (lv_docReference_40_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'issues' ( (lv_issues_42_0= RULE_STRING ) )+ ) ) ) ) )* )
            {
            getUnorderedGroupHelper().enter(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5());
            // InternalReqSpec.g:3399:5: ( ( ({...}? => ( ({...}? => (otherlv_9= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_11_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_12_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_computes_13_0= ruleComputeDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_predicate_15_0= ruleReqPredicate ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_16_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_17_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_18= 'mitigates' ( ( (otherlv_19= RULE_ID ) ) | ( (lv_exceptionText_20_0= RULE_STRING ) ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_21= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'decomposes' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_27_0= 'dropped' ) ) ( (lv_dropRationale_28_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'development' otherlv_30= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'see' otherlv_33= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'see' otherlv_36= 'requirement' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'see' otherlv_39= 'document' ( (lv_docReference_40_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'issues' ( (lv_issues_42_0= RULE_STRING ) )+ ) ) ) ) )* )
            // InternalReqSpec.g:3400:6: ( ({...}? => ( ({...}? => (otherlv_9= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_11_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_12_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_computes_13_0= ruleComputeDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_predicate_15_0= ruleReqPredicate ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_16_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_17_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_18= 'mitigates' ( ( (otherlv_19= RULE_ID ) ) | ( (lv_exceptionText_20_0= RULE_STRING ) ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_21= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'decomposes' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_27_0= 'dropped' ) ) ( (lv_dropRationale_28_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'development' otherlv_30= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'see' otherlv_33= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'see' otherlv_36= 'requirement' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'see' otherlv_39= 'document' ( (lv_docReference_40_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'issues' ( (lv_issues_42_0= RULE_STRING ) )+ ) ) ) ) )*
            {
            // InternalReqSpec.g:3400:6: ( ({...}? => ( ({...}? => (otherlv_9= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_11_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_12_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_computes_13_0= ruleComputeDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_predicate_15_0= ruleReqPredicate ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_16_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_17_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_18= 'mitigates' ( ( (otherlv_19= RULE_ID ) ) | ( (lv_exceptionText_20_0= RULE_STRING ) ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_21= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'decomposes' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_27_0= 'dropped' ) ) ( (lv_dropRationale_28_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'development' otherlv_30= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'see' otherlv_33= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'see' otherlv_36= 'requirement' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'see' otherlv_39= 'document' ( (lv_docReference_40_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'issues' ( (lv_issues_42_0= RULE_STRING ) )+ ) ) ) ) )*
            loop97:
            do {
                int alt97=19;
                alt97 = dfa97.predict(input);
                switch (alt97) {
            	case 1 :
            	    // InternalReqSpec.g:3401:4: ({...}? => ( ({...}? => (otherlv_9= 'category' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    {
            	    // InternalReqSpec.g:3401:4: ({...}? => ( ({...}? => (otherlv_9= 'category' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    // InternalReqSpec.g:3402:5: {...}? => ( ({...}? => (otherlv_9= 'category' ( ( ruleQualifiedName ) )+ ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 0) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGlobalRequirement", "getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 0)");
            	    }
            	    // InternalReqSpec.g:3402:114: ( ({...}? => (otherlv_9= 'category' ( ( ruleQualifiedName ) )+ ) ) )
            	    // InternalReqSpec.g:3403:6: ({...}? => (otherlv_9= 'category' ( ( ruleQualifiedName ) )+ ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 0);
            	    // InternalReqSpec.g:3406:9: ({...}? => (otherlv_9= 'category' ( ( ruleQualifiedName ) )+ ) )
            	    // InternalReqSpec.g:3406:10: {...}? => (otherlv_9= 'category' ( ( ruleQualifiedName ) )+ )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGlobalRequirement", "true");
            	    }
            	    // InternalReqSpec.g:3406:19: (otherlv_9= 'category' ( ( ruleQualifiedName ) )+ )
            	    // InternalReqSpec.g:3406:20: otherlv_9= 'category' ( ( ruleQualifiedName ) )+
            	    {
            	    otherlv_9=(Token)match(input,33,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_9, grammarAccess.getGlobalRequirementAccess().getCategoryKeyword_5_0_0());
            	      								
            	    }
            	    // InternalReqSpec.g:3410:9: ( ( ruleQualifiedName ) )+
            	    int cnt84=0;
            	    loop84:
            	    do {
            	        int alt84=2;
            	        int LA84_0 = input.LA(1);

            	        if ( (LA84_0==RULE_ID) ) {
            	            alt84=1;
            	        }


            	        switch (alt84) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:3411:10: ( ruleQualifiedName )
            	    	    {
            	    	    // InternalReqSpec.g:3411:10: ( ruleQualifiedName )
            	    	    // InternalReqSpec.g:3412:11: ruleQualifiedName
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      											if (current==null) {
            	    	      												current = createModelElement(grammarAccess.getGlobalRequirementRule());
            	    	      											}
            	    	      										
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      											newCompositeNode(grammarAccess.getGlobalRequirementAccess().getCategoryCategoryCrossReference_5_0_1_0());
            	    	      										
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_49);
            	    	    ruleQualifiedName();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      											afterParserOrEnumRuleCall();
            	    	      										
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt84 >= 1 ) break loop84;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(84, input);
            	                throw eee;
            	        }
            	        cnt84++;
            	    } while (true);


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // InternalReqSpec.g:3432:4: ({...}? => ( ({...}? => ( (lv_description_11_0= ruleDescription ) ) ) ) )
            	    {
            	    // InternalReqSpec.g:3432:4: ({...}? => ( ({...}? => ( (lv_description_11_0= ruleDescription ) ) ) ) )
            	    // InternalReqSpec.g:3433:5: {...}? => ( ({...}? => ( (lv_description_11_0= ruleDescription ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 1) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGlobalRequirement", "getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 1)");
            	    }
            	    // InternalReqSpec.g:3433:114: ( ({...}? => ( (lv_description_11_0= ruleDescription ) ) ) )
            	    // InternalReqSpec.g:3434:6: ({...}? => ( (lv_description_11_0= ruleDescription ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 1);
            	    // InternalReqSpec.g:3437:9: ({...}? => ( (lv_description_11_0= ruleDescription ) ) )
            	    // InternalReqSpec.g:3437:10: {...}? => ( (lv_description_11_0= ruleDescription ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGlobalRequirement", "true");
            	    }
            	    // InternalReqSpec.g:3437:19: ( (lv_description_11_0= ruleDescription ) )
            	    // InternalReqSpec.g:3437:20: (lv_description_11_0= ruleDescription )
            	    {
            	    // InternalReqSpec.g:3437:20: (lv_description_11_0= ruleDescription )
            	    // InternalReqSpec.g:3438:10: lv_description_11_0= ruleDescription
            	    {
            	    if ( state.backtracking==0 ) {

            	      										newCompositeNode(grammarAccess.getGlobalRequirementAccess().getDescriptionDescriptionParserRuleCall_5_1_0());
            	      									
            	    }
            	    pushFollow(FollowSets000.FOLLOW_48);
            	    lv_description_11_0=ruleDescription();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      										if (current==null) {
            	      											current = createModelElementForParent(grammarAccess.getGlobalRequirementRule());
            	      										}
            	      										set(
            	      											current,
            	      											"description",
            	      											lv_description_11_0,
            	      											"org.osate.alisa.common.Common.Description");
            	      										afterParserOrEnumRuleCall();
            	      									
            	    }

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 3 :
            	    // InternalReqSpec.g:3460:4: ({...}? => ( ({...}? => ( (lv_constants_12_0= ruleValDeclaration ) ) )+ ) )
            	    {
            	    // InternalReqSpec.g:3460:4: ({...}? => ( ({...}? => ( (lv_constants_12_0= ruleValDeclaration ) ) )+ ) )
            	    // InternalReqSpec.g:3461:5: {...}? => ( ({...}? => ( (lv_constants_12_0= ruleValDeclaration ) ) )+ )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 2) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGlobalRequirement", "getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 2)");
            	    }
            	    // InternalReqSpec.g:3461:114: ( ({...}? => ( (lv_constants_12_0= ruleValDeclaration ) ) )+ )
            	    // InternalReqSpec.g:3462:6: ({...}? => ( (lv_constants_12_0= ruleValDeclaration ) ) )+
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 2);
            	    // InternalReqSpec.g:3465:9: ({...}? => ( (lv_constants_12_0= ruleValDeclaration ) ) )+
            	    int cnt85=0;
            	    loop85:
            	    do {
            	        int alt85=2;
            	        int LA85_0 = input.LA(1);

            	        if ( (LA85_0==60) ) {
            	            int LA85_2 = input.LA(2);

            	            if ( ((true)) ) {
            	                alt85=1;
            	            }


            	        }


            	        switch (alt85) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:3465:10: {...}? => ( (lv_constants_12_0= ruleValDeclaration ) )
            	    	    {
            	    	    if ( !((true)) ) {
            	    	        if (state.backtracking>0) {state.failed=true; return current;}
            	    	        throw new FailedPredicateException(input, "ruleGlobalRequirement", "true");
            	    	    }
            	    	    // InternalReqSpec.g:3465:19: ( (lv_constants_12_0= ruleValDeclaration ) )
            	    	    // InternalReqSpec.g:3465:20: (lv_constants_12_0= ruleValDeclaration )
            	    	    {
            	    	    // InternalReqSpec.g:3465:20: (lv_constants_12_0= ruleValDeclaration )
            	    	    // InternalReqSpec.g:3466:10: lv_constants_12_0= ruleValDeclaration
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      										newCompositeNode(grammarAccess.getGlobalRequirementAccess().getConstantsValDeclarationParserRuleCall_5_2_0());
            	    	      									
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_48);
            	    	    lv_constants_12_0=ruleValDeclaration();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      										if (current==null) {
            	    	      											current = createModelElementForParent(grammarAccess.getGlobalRequirementRule());
            	    	      										}
            	    	      										add(
            	    	      											current,
            	    	      											"constants",
            	    	      											lv_constants_12_0,
            	    	      											"org.osate.reqspec.ReqSpec.ValDeclaration");
            	    	      										afterParserOrEnumRuleCall();
            	    	      									
            	    	    }

            	    	    }


            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt85 >= 1 ) break loop85;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(85, input);
            	                throw eee;
            	        }
            	        cnt85++;
            	    } while (true);

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 4 :
            	    // InternalReqSpec.g:3488:4: ({...}? => ( ({...}? => ( (lv_computes_13_0= ruleComputeDeclaration ) ) )+ ) )
            	    {
            	    // InternalReqSpec.g:3488:4: ({...}? => ( ({...}? => ( (lv_computes_13_0= ruleComputeDeclaration ) ) )+ ) )
            	    // InternalReqSpec.g:3489:5: {...}? => ( ({...}? => ( (lv_computes_13_0= ruleComputeDeclaration ) ) )+ )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 3) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGlobalRequirement", "getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 3)");
            	    }
            	    // InternalReqSpec.g:3489:114: ( ({...}? => ( (lv_computes_13_0= ruleComputeDeclaration ) ) )+ )
            	    // InternalReqSpec.g:3490:6: ({...}? => ( (lv_computes_13_0= ruleComputeDeclaration ) ) )+
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 3);
            	    // InternalReqSpec.g:3493:9: ({...}? => ( (lv_computes_13_0= ruleComputeDeclaration ) ) )+
            	    int cnt86=0;
            	    loop86:
            	    do {
            	        int alt86=2;
            	        int LA86_0 = input.LA(1);

            	        if ( (LA86_0==80) ) {
            	            int LA86_2 = input.LA(2);

            	            if ( ((true)) ) {
            	                alt86=1;
            	            }


            	        }


            	        switch (alt86) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:3493:10: {...}? => ( (lv_computes_13_0= ruleComputeDeclaration ) )
            	    	    {
            	    	    if ( !((true)) ) {
            	    	        if (state.backtracking>0) {state.failed=true; return current;}
            	    	        throw new FailedPredicateException(input, "ruleGlobalRequirement", "true");
            	    	    }
            	    	    // InternalReqSpec.g:3493:19: ( (lv_computes_13_0= ruleComputeDeclaration ) )
            	    	    // InternalReqSpec.g:3493:20: (lv_computes_13_0= ruleComputeDeclaration )
            	    	    {
            	    	    // InternalReqSpec.g:3493:20: (lv_computes_13_0= ruleComputeDeclaration )
            	    	    // InternalReqSpec.g:3494:10: lv_computes_13_0= ruleComputeDeclaration
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      										newCompositeNode(grammarAccess.getGlobalRequirementAccess().getComputesComputeDeclarationParserRuleCall_5_3_0());
            	    	      									
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_48);
            	    	    lv_computes_13_0=ruleComputeDeclaration();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      										if (current==null) {
            	    	      											current = createModelElementForParent(grammarAccess.getGlobalRequirementRule());
            	    	      										}
            	    	      										add(
            	    	      											current,
            	    	      											"computes",
            	    	      											lv_computes_13_0,
            	    	      											"org.osate.alisa.common.Common.ComputeDeclaration");
            	    	      										afterParserOrEnumRuleCall();
            	    	      									
            	    	    }

            	    	    }


            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt86 >= 1 ) break loop86;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(86, input);
            	                throw eee;
            	        }
            	        cnt86++;
            	    } while (true);

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 5 :
            	    // InternalReqSpec.g:3516:4: ({...}? => ( ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) ) ) )
            	    {
            	    // InternalReqSpec.g:3516:4: ({...}? => ( ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) ) ) )
            	    // InternalReqSpec.g:3517:5: {...}? => ( ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 4) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGlobalRequirement", "getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 4)");
            	    }
            	    // InternalReqSpec.g:3517:114: ( ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) ) )
            	    // InternalReqSpec.g:3518:6: ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 4);
            	    // InternalReqSpec.g:3521:9: ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) )
            	    // InternalReqSpec.g:3521:10: {...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGlobalRequirement", "true");
            	    }
            	    // InternalReqSpec.g:3521:19: ( (lv_whencondition_14_0= ruleWhenCondition ) )
            	    // InternalReqSpec.g:3521:20: (lv_whencondition_14_0= ruleWhenCondition )
            	    {
            	    // InternalReqSpec.g:3521:20: (lv_whencondition_14_0= ruleWhenCondition )
            	    // InternalReqSpec.g:3522:10: lv_whencondition_14_0= ruleWhenCondition
            	    {
            	    if ( state.backtracking==0 ) {

            	      										newCompositeNode(grammarAccess.getGlobalRequirementAccess().getWhenconditionWhenConditionParserRuleCall_5_4_0());
            	      									
            	    }
            	    pushFollow(FollowSets000.FOLLOW_48);
            	    lv_whencondition_14_0=ruleWhenCondition();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      										if (current==null) {
            	      											current = createModelElementForParent(grammarAccess.getGlobalRequirementRule());
            	      										}
            	      										set(
            	      											current,
            	      											"whencondition",
            	      											lv_whencondition_14_0,
            	      											"org.osate.reqspec.ReqSpec.WhenCondition");
            	      										afterParserOrEnumRuleCall();
            	      									
            	    }

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 6 :
            	    // InternalReqSpec.g:3544:4: ({...}? => ( ({...}? => ( (lv_predicate_15_0= ruleReqPredicate ) ) ) ) )
            	    {
            	    // InternalReqSpec.g:3544:4: ({...}? => ( ({...}? => ( (lv_predicate_15_0= ruleReqPredicate ) ) ) ) )
            	    // InternalReqSpec.g:3545:5: {...}? => ( ({...}? => ( (lv_predicate_15_0= ruleReqPredicate ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 5) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGlobalRequirement", "getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 5)");
            	    }
            	    // InternalReqSpec.g:3545:114: ( ({...}? => ( (lv_predicate_15_0= ruleReqPredicate ) ) ) )
            	    // InternalReqSpec.g:3546:6: ({...}? => ( (lv_predicate_15_0= ruleReqPredicate ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 5);
            	    // InternalReqSpec.g:3549:9: ({...}? => ( (lv_predicate_15_0= ruleReqPredicate ) ) )
            	    // InternalReqSpec.g:3549:10: {...}? => ( (lv_predicate_15_0= ruleReqPredicate ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGlobalRequirement", "true");
            	    }
            	    // InternalReqSpec.g:3549:19: ( (lv_predicate_15_0= ruleReqPredicate ) )
            	    // InternalReqSpec.g:3549:20: (lv_predicate_15_0= ruleReqPredicate )
            	    {
            	    // InternalReqSpec.g:3549:20: (lv_predicate_15_0= ruleReqPredicate )
            	    // InternalReqSpec.g:3550:10: lv_predicate_15_0= ruleReqPredicate
            	    {
            	    if ( state.backtracking==0 ) {

            	      										newCompositeNode(grammarAccess.getGlobalRequirementAccess().getPredicateReqPredicateParserRuleCall_5_5_0());
            	      									
            	    }
            	    pushFollow(FollowSets000.FOLLOW_48);
            	    lv_predicate_15_0=ruleReqPredicate();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      										if (current==null) {
            	      											current = createModelElementForParent(grammarAccess.getGlobalRequirementRule());
            	      										}
            	      										set(
            	      											current,
            	      											"predicate",
            	      											lv_predicate_15_0,
            	      											"org.osate.reqspec.ReqSpec.ReqPredicate");
            	      										afterParserOrEnumRuleCall();
            	      									
            	    }

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 7 :
            	    // InternalReqSpec.g:3572:4: ({...}? => ( ({...}? => ( (lv_rationale_16_0= ruleRationale ) ) ) ) )
            	    {
            	    // InternalReqSpec.g:3572:4: ({...}? => ( ({...}? => ( (lv_rationale_16_0= ruleRationale ) ) ) ) )
            	    // InternalReqSpec.g:3573:5: {...}? => ( ({...}? => ( (lv_rationale_16_0= ruleRationale ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 6) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGlobalRequirement", "getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 6)");
            	    }
            	    // InternalReqSpec.g:3573:114: ( ({...}? => ( (lv_rationale_16_0= ruleRationale ) ) ) )
            	    // InternalReqSpec.g:3574:6: ({...}? => ( (lv_rationale_16_0= ruleRationale ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 6);
            	    // InternalReqSpec.g:3577:9: ({...}? => ( (lv_rationale_16_0= ruleRationale ) ) )
            	    // InternalReqSpec.g:3577:10: {...}? => ( (lv_rationale_16_0= ruleRationale ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGlobalRequirement", "true");
            	    }
            	    // InternalReqSpec.g:3577:19: ( (lv_rationale_16_0= ruleRationale ) )
            	    // InternalReqSpec.g:3577:20: (lv_rationale_16_0= ruleRationale )
            	    {
            	    // InternalReqSpec.g:3577:20: (lv_rationale_16_0= ruleRationale )
            	    // InternalReqSpec.g:3578:10: lv_rationale_16_0= ruleRationale
            	    {
            	    if ( state.backtracking==0 ) {

            	      										newCompositeNode(grammarAccess.getGlobalRequirementAccess().getRationaleRationaleParserRuleCall_5_6_0());
            	      									
            	    }
            	    pushFollow(FollowSets000.FOLLOW_48);
            	    lv_rationale_16_0=ruleRationale();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      										if (current==null) {
            	      											current = createModelElementForParent(grammarAccess.getGlobalRequirementRule());
            	      										}
            	      										set(
            	      											current,
            	      											"rationale",
            	      											lv_rationale_16_0,
            	      											"org.osate.alisa.common.Common.Rationale");
            	      										afterParserOrEnumRuleCall();
            	      									
            	    }

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 8 :
            	    // InternalReqSpec.g:3600:4: ({...}? => ( ({...}? => ( (lv_changeUncertainty_17_0= ruleUncertainty ) ) ) ) )
            	    {
            	    // InternalReqSpec.g:3600:4: ({...}? => ( ({...}? => ( (lv_changeUncertainty_17_0= ruleUncertainty ) ) ) ) )
            	    // InternalReqSpec.g:3601:5: {...}? => ( ({...}? => ( (lv_changeUncertainty_17_0= ruleUncertainty ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 7) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGlobalRequirement", "getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 7)");
            	    }
            	    // InternalReqSpec.g:3601:114: ( ({...}? => ( (lv_changeUncertainty_17_0= ruleUncertainty ) ) ) )
            	    // InternalReqSpec.g:3602:6: ({...}? => ( (lv_changeUncertainty_17_0= ruleUncertainty ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 7);
            	    // InternalReqSpec.g:3605:9: ({...}? => ( (lv_changeUncertainty_17_0= ruleUncertainty ) ) )
            	    // InternalReqSpec.g:3605:10: {...}? => ( (lv_changeUncertainty_17_0= ruleUncertainty ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGlobalRequirement", "true");
            	    }
            	    // InternalReqSpec.g:3605:19: ( (lv_changeUncertainty_17_0= ruleUncertainty ) )
            	    // InternalReqSpec.g:3605:20: (lv_changeUncertainty_17_0= ruleUncertainty )
            	    {
            	    // InternalReqSpec.g:3605:20: (lv_changeUncertainty_17_0= ruleUncertainty )
            	    // InternalReqSpec.g:3606:10: lv_changeUncertainty_17_0= ruleUncertainty
            	    {
            	    if ( state.backtracking==0 ) {

            	      										newCompositeNode(grammarAccess.getGlobalRequirementAccess().getChangeUncertaintyUncertaintyParserRuleCall_5_7_0());
            	      									
            	    }
            	    pushFollow(FollowSets000.FOLLOW_48);
            	    lv_changeUncertainty_17_0=ruleUncertainty();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      										if (current==null) {
            	      											current = createModelElementForParent(grammarAccess.getGlobalRequirementRule());
            	      										}
            	      										set(
            	      											current,
            	      											"changeUncertainty",
            	      											lv_changeUncertainty_17_0,
            	      											"org.osate.alisa.common.Common.Uncertainty");
            	      										afterParserOrEnumRuleCall();
            	      									
            	    }

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 9 :
            	    // InternalReqSpec.g:3628:4: ({...}? => ( ({...}? => (otherlv_18= 'mitigates' ( ( (otherlv_19= RULE_ID ) ) | ( (lv_exceptionText_20_0= RULE_STRING ) ) ) ) ) ) )
            	    {
            	    // InternalReqSpec.g:3628:4: ({...}? => ( ({...}? => (otherlv_18= 'mitigates' ( ( (otherlv_19= RULE_ID ) ) | ( (lv_exceptionText_20_0= RULE_STRING ) ) ) ) ) ) )
            	    // InternalReqSpec.g:3629:5: {...}? => ( ({...}? => (otherlv_18= 'mitigates' ( ( (otherlv_19= RULE_ID ) ) | ( (lv_exceptionText_20_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 8) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGlobalRequirement", "getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 8)");
            	    }
            	    // InternalReqSpec.g:3629:114: ( ({...}? => (otherlv_18= 'mitigates' ( ( (otherlv_19= RULE_ID ) ) | ( (lv_exceptionText_20_0= RULE_STRING ) ) ) ) ) )
            	    // InternalReqSpec.g:3630:6: ({...}? => (otherlv_18= 'mitigates' ( ( (otherlv_19= RULE_ID ) ) | ( (lv_exceptionText_20_0= RULE_STRING ) ) ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 8);
            	    // InternalReqSpec.g:3633:9: ({...}? => (otherlv_18= 'mitigates' ( ( (otherlv_19= RULE_ID ) ) | ( (lv_exceptionText_20_0= RULE_STRING ) ) ) ) )
            	    // InternalReqSpec.g:3633:10: {...}? => (otherlv_18= 'mitigates' ( ( (otherlv_19= RULE_ID ) ) | ( (lv_exceptionText_20_0= RULE_STRING ) ) ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGlobalRequirement", "true");
            	    }
            	    // InternalReqSpec.g:3633:19: (otherlv_18= 'mitigates' ( ( (otherlv_19= RULE_ID ) ) | ( (lv_exceptionText_20_0= RULE_STRING ) ) ) )
            	    // InternalReqSpec.g:3633:20: otherlv_18= 'mitigates' ( ( (otherlv_19= RULE_ID ) ) | ( (lv_exceptionText_20_0= RULE_STRING ) ) )
            	    {
            	    otherlv_18=(Token)match(input,40,FollowSets000.FOLLOW_24); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_18, grammarAccess.getGlobalRequirementAccess().getMitigatesKeyword_5_8_0());
            	      								
            	    }
            	    // InternalReqSpec.g:3637:9: ( ( (otherlv_19= RULE_ID ) ) | ( (lv_exceptionText_20_0= RULE_STRING ) ) )
            	    int alt87=2;
            	    int LA87_0 = input.LA(1);

            	    if ( (LA87_0==RULE_ID) ) {
            	        alt87=1;
            	    }
            	    else if ( (LA87_0==RULE_STRING) ) {
            	        alt87=2;
            	    }
            	    else {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 87, 0, input);

            	        throw nvae;
            	    }
            	    switch (alt87) {
            	        case 1 :
            	            // InternalReqSpec.g:3638:10: ( (otherlv_19= RULE_ID ) )
            	            {
            	            // InternalReqSpec.g:3638:10: ( (otherlv_19= RULE_ID ) )
            	            // InternalReqSpec.g:3639:11: (otherlv_19= RULE_ID )
            	            {
            	            // InternalReqSpec.g:3639:11: (otherlv_19= RULE_ID )
            	            // InternalReqSpec.g:3640:12: otherlv_19= RULE_ID
            	            {
            	            if ( state.backtracking==0 ) {

            	              												if (current==null) {
            	              													current = createModelElement(grammarAccess.getGlobalRequirementRule());
            	              												}
            	              											
            	            }
            	            otherlv_19=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_48); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              												newLeafNode(otherlv_19, grammarAccess.getGlobalRequirementAccess().getExceptionEObjectCrossReference_5_8_1_0_0());
            	              											
            	            }

            	            }


            	            }


            	            }
            	            break;
            	        case 2 :
            	            // InternalReqSpec.g:3652:10: ( (lv_exceptionText_20_0= RULE_STRING ) )
            	            {
            	            // InternalReqSpec.g:3652:10: ( (lv_exceptionText_20_0= RULE_STRING ) )
            	            // InternalReqSpec.g:3653:11: (lv_exceptionText_20_0= RULE_STRING )
            	            {
            	            // InternalReqSpec.g:3653:11: (lv_exceptionText_20_0= RULE_STRING )
            	            // InternalReqSpec.g:3654:12: lv_exceptionText_20_0= RULE_STRING
            	            {
            	            lv_exceptionText_20_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_48); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              												newLeafNode(lv_exceptionText_20_0, grammarAccess.getGlobalRequirementAccess().getExceptionTextSTRINGTerminalRuleCall_5_8_1_1_0());
            	              											
            	            }
            	            if ( state.backtracking==0 ) {

            	              												if (current==null) {
            	              													current = createModelElement(grammarAccess.getGlobalRequirementRule());
            	              												}
            	              												setWithLastConsumed(
            	              													current,
            	              													"exceptionText",
            	              													lv_exceptionText_20_0,
            	              													"org.eclipse.xtext.common.Terminals.STRING");
            	              											
            	            }

            	            }


            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 10 :
            	    // InternalReqSpec.g:3677:4: ({...}? => ( ({...}? => (otherlv_21= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    {
            	    // InternalReqSpec.g:3677:4: ({...}? => ( ({...}? => (otherlv_21= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    // InternalReqSpec.g:3678:5: {...}? => ( ({...}? => (otherlv_21= 'refines' ( ( ruleQualifiedName ) )+ ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 9) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGlobalRequirement", "getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 9)");
            	    }
            	    // InternalReqSpec.g:3678:114: ( ({...}? => (otherlv_21= 'refines' ( ( ruleQualifiedName ) )+ ) ) )
            	    // InternalReqSpec.g:3679:6: ({...}? => (otherlv_21= 'refines' ( ( ruleQualifiedName ) )+ ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 9);
            	    // InternalReqSpec.g:3682:9: ({...}? => (otherlv_21= 'refines' ( ( ruleQualifiedName ) )+ ) )
            	    // InternalReqSpec.g:3682:10: {...}? => (otherlv_21= 'refines' ( ( ruleQualifiedName ) )+ )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGlobalRequirement", "true");
            	    }
            	    // InternalReqSpec.g:3682:19: (otherlv_21= 'refines' ( ( ruleQualifiedName ) )+ )
            	    // InternalReqSpec.g:3682:20: otherlv_21= 'refines' ( ( ruleQualifiedName ) )+
            	    {
            	    otherlv_21=(Token)match(input,34,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_21, grammarAccess.getGlobalRequirementAccess().getRefinesKeyword_5_9_0());
            	      								
            	    }
            	    // InternalReqSpec.g:3686:9: ( ( ruleQualifiedName ) )+
            	    int cnt88=0;
            	    loop88:
            	    do {
            	        int alt88=2;
            	        int LA88_0 = input.LA(1);

            	        if ( (LA88_0==RULE_ID) ) {
            	            alt88=1;
            	        }


            	        switch (alt88) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:3687:10: ( ruleQualifiedName )
            	    	    {
            	    	    // InternalReqSpec.g:3687:10: ( ruleQualifiedName )
            	    	    // InternalReqSpec.g:3688:11: ruleQualifiedName
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      											if (current==null) {
            	    	      												current = createModelElement(grammarAccess.getGlobalRequirementRule());
            	    	      											}
            	    	      										
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      											newCompositeNode(grammarAccess.getGlobalRequirementAccess().getRefinesReferenceRequirementCrossReference_5_9_1_0());
            	    	      										
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_49);
            	    	    ruleQualifiedName();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      											afterParserOrEnumRuleCall();
            	    	      										
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt88 >= 1 ) break loop88;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(88, input);
            	                throw eee;
            	        }
            	        cnt88++;
            	    } while (true);


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 11 :
            	    // InternalReqSpec.g:3708:4: ({...}? => ( ({...}? => (otherlv_23= 'decomposes' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    {
            	    // InternalReqSpec.g:3708:4: ({...}? => ( ({...}? => (otherlv_23= 'decomposes' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    // InternalReqSpec.g:3709:5: {...}? => ( ({...}? => (otherlv_23= 'decomposes' ( ( ruleQualifiedName ) )+ ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 10) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGlobalRequirement", "getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 10)");
            	    }
            	    // InternalReqSpec.g:3709:115: ( ({...}? => (otherlv_23= 'decomposes' ( ( ruleQualifiedName ) )+ ) ) )
            	    // InternalReqSpec.g:3710:6: ({...}? => (otherlv_23= 'decomposes' ( ( ruleQualifiedName ) )+ ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 10);
            	    // InternalReqSpec.g:3713:9: ({...}? => (otherlv_23= 'decomposes' ( ( ruleQualifiedName ) )+ ) )
            	    // InternalReqSpec.g:3713:10: {...}? => (otherlv_23= 'decomposes' ( ( ruleQualifiedName ) )+ )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGlobalRequirement", "true");
            	    }
            	    // InternalReqSpec.g:3713:19: (otherlv_23= 'decomposes' ( ( ruleQualifiedName ) )+ )
            	    // InternalReqSpec.g:3713:20: otherlv_23= 'decomposes' ( ( ruleQualifiedName ) )+
            	    {
            	    otherlv_23=(Token)match(input,42,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_23, grammarAccess.getGlobalRequirementAccess().getDecomposesKeyword_5_10_0());
            	      								
            	    }
            	    // InternalReqSpec.g:3717:9: ( ( ruleQualifiedName ) )+
            	    int cnt89=0;
            	    loop89:
            	    do {
            	        int alt89=2;
            	        int LA89_0 = input.LA(1);

            	        if ( (LA89_0==RULE_ID) ) {
            	            alt89=1;
            	        }


            	        switch (alt89) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:3718:10: ( ruleQualifiedName )
            	    	    {
            	    	    // InternalReqSpec.g:3718:10: ( ruleQualifiedName )
            	    	    // InternalReqSpec.g:3719:11: ruleQualifiedName
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      											if (current==null) {
            	    	      												current = createModelElement(grammarAccess.getGlobalRequirementRule());
            	    	      											}
            	    	      										
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      											newCompositeNode(grammarAccess.getGlobalRequirementAccess().getDecomposesReferenceRequirementCrossReference_5_10_1_0());
            	    	      										
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_49);
            	    	    ruleQualifiedName();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      											afterParserOrEnumRuleCall();
            	    	      										
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt89 >= 1 ) break loop89;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(89, input);
            	                throw eee;
            	        }
            	        cnt89++;
            	    } while (true);


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 12 :
            	    // InternalReqSpec.g:3739:4: ({...}? => ( ({...}? => (otherlv_25= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    {
            	    // InternalReqSpec.g:3739:4: ({...}? => ( ({...}? => (otherlv_25= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    // InternalReqSpec.g:3740:5: {...}? => ( ({...}? => (otherlv_25= 'evolves' ( ( ruleQualifiedName ) )+ ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 11) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGlobalRequirement", "getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 11)");
            	    }
            	    // InternalReqSpec.g:3740:115: ( ({...}? => (otherlv_25= 'evolves' ( ( ruleQualifiedName ) )+ ) ) )
            	    // InternalReqSpec.g:3741:6: ({...}? => (otherlv_25= 'evolves' ( ( ruleQualifiedName ) )+ ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 11);
            	    // InternalReqSpec.g:3744:9: ({...}? => (otherlv_25= 'evolves' ( ( ruleQualifiedName ) )+ ) )
            	    // InternalReqSpec.g:3744:10: {...}? => (otherlv_25= 'evolves' ( ( ruleQualifiedName ) )+ )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGlobalRequirement", "true");
            	    }
            	    // InternalReqSpec.g:3744:19: (otherlv_25= 'evolves' ( ( ruleQualifiedName ) )+ )
            	    // InternalReqSpec.g:3744:20: otherlv_25= 'evolves' ( ( ruleQualifiedName ) )+
            	    {
            	    otherlv_25=(Token)match(input,37,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_25, grammarAccess.getGlobalRequirementAccess().getEvolvesKeyword_5_11_0());
            	      								
            	    }
            	    // InternalReqSpec.g:3748:9: ( ( ruleQualifiedName ) )+
            	    int cnt90=0;
            	    loop90:
            	    do {
            	        int alt90=2;
            	        int LA90_0 = input.LA(1);

            	        if ( (LA90_0==RULE_ID) ) {
            	            alt90=1;
            	        }


            	        switch (alt90) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:3749:10: ( ruleQualifiedName )
            	    	    {
            	    	    // InternalReqSpec.g:3749:10: ( ruleQualifiedName )
            	    	    // InternalReqSpec.g:3750:11: ruleQualifiedName
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      											if (current==null) {
            	    	      												current = createModelElement(grammarAccess.getGlobalRequirementRule());
            	    	      											}
            	    	      										
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      											newCompositeNode(grammarAccess.getGlobalRequirementAccess().getEvolvesReferenceRequirementCrossReference_5_11_1_0());
            	    	      										
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_49);
            	    	    ruleQualifiedName();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      											afterParserOrEnumRuleCall();
            	    	      										
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt90 >= 1 ) break loop90;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(90, input);
            	                throw eee;
            	        }
            	        cnt90++;
            	    } while (true);


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 13 :
            	    // InternalReqSpec.g:3770:4: ({...}? => ( ({...}? => ( ( (lv_dropped_27_0= 'dropped' ) ) ( (lv_dropRationale_28_0= RULE_STRING ) )? ) ) ) )
            	    {
            	    // InternalReqSpec.g:3770:4: ({...}? => ( ({...}? => ( ( (lv_dropped_27_0= 'dropped' ) ) ( (lv_dropRationale_28_0= RULE_STRING ) )? ) ) ) )
            	    // InternalReqSpec.g:3771:5: {...}? => ( ({...}? => ( ( (lv_dropped_27_0= 'dropped' ) ) ( (lv_dropRationale_28_0= RULE_STRING ) )? ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 12) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGlobalRequirement", "getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 12)");
            	    }
            	    // InternalReqSpec.g:3771:115: ( ({...}? => ( ( (lv_dropped_27_0= 'dropped' ) ) ( (lv_dropRationale_28_0= RULE_STRING ) )? ) ) )
            	    // InternalReqSpec.g:3772:6: ({...}? => ( ( (lv_dropped_27_0= 'dropped' ) ) ( (lv_dropRationale_28_0= RULE_STRING ) )? ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 12);
            	    // InternalReqSpec.g:3775:9: ({...}? => ( ( (lv_dropped_27_0= 'dropped' ) ) ( (lv_dropRationale_28_0= RULE_STRING ) )? ) )
            	    // InternalReqSpec.g:3775:10: {...}? => ( ( (lv_dropped_27_0= 'dropped' ) ) ( (lv_dropRationale_28_0= RULE_STRING ) )? )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGlobalRequirement", "true");
            	    }
            	    // InternalReqSpec.g:3775:19: ( ( (lv_dropped_27_0= 'dropped' ) ) ( (lv_dropRationale_28_0= RULE_STRING ) )? )
            	    // InternalReqSpec.g:3775:20: ( (lv_dropped_27_0= 'dropped' ) ) ( (lv_dropRationale_28_0= RULE_STRING ) )?
            	    {
            	    // InternalReqSpec.g:3775:20: ( (lv_dropped_27_0= 'dropped' ) )
            	    // InternalReqSpec.g:3776:10: (lv_dropped_27_0= 'dropped' )
            	    {
            	    // InternalReqSpec.g:3776:10: (lv_dropped_27_0= 'dropped' )
            	    // InternalReqSpec.g:3777:11: lv_dropped_27_0= 'dropped'
            	    {
            	    lv_dropped_27_0=(Token)match(input,38,FollowSets000.FOLLOW_50); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      											newLeafNode(lv_dropped_27_0, grammarAccess.getGlobalRequirementAccess().getDroppedDroppedKeyword_5_12_0_0());
            	      										
            	    }
            	    if ( state.backtracking==0 ) {

            	      											if (current==null) {
            	      												current = createModelElement(grammarAccess.getGlobalRequirementRule());
            	      											}
            	      											setWithLastConsumed(current, "dropped", true, "dropped");
            	      										
            	    }

            	    }


            	    }

            	    // InternalReqSpec.g:3789:9: ( (lv_dropRationale_28_0= RULE_STRING ) )?
            	    int alt91=2;
            	    int LA91_0 = input.LA(1);

            	    if ( (LA91_0==RULE_STRING) ) {
            	        alt91=1;
            	    }
            	    switch (alt91) {
            	        case 1 :
            	            // InternalReqSpec.g:3790:10: (lv_dropRationale_28_0= RULE_STRING )
            	            {
            	            // InternalReqSpec.g:3790:10: (lv_dropRationale_28_0= RULE_STRING )
            	            // InternalReqSpec.g:3791:11: lv_dropRationale_28_0= RULE_STRING
            	            {
            	            lv_dropRationale_28_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_48); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              											newLeafNode(lv_dropRationale_28_0, grammarAccess.getGlobalRequirementAccess().getDropRationaleSTRINGTerminalRuleCall_5_12_1_0());
            	              										
            	            }
            	            if ( state.backtracking==0 ) {

            	              											if (current==null) {
            	              												current = createModelElement(grammarAccess.getGlobalRequirementRule());
            	              											}
            	              											setWithLastConsumed(
            	              												current,
            	              												"dropRationale",
            	              												lv_dropRationale_28_0,
            	              												"org.eclipse.xtext.common.Terminals.STRING");
            	              										
            	            }

            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 14 :
            	    // InternalReqSpec.g:3813:4: ({...}? => ( ({...}? => (otherlv_29= 'development' otherlv_30= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    {
            	    // InternalReqSpec.g:3813:4: ({...}? => ( ({...}? => (otherlv_29= 'development' otherlv_30= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    // InternalReqSpec.g:3814:5: {...}? => ( ({...}? => (otherlv_29= 'development' otherlv_30= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 13) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGlobalRequirement", "getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 13)");
            	    }
            	    // InternalReqSpec.g:3814:115: ( ({...}? => (otherlv_29= 'development' otherlv_30= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) )
            	    // InternalReqSpec.g:3815:6: ({...}? => (otherlv_29= 'development' otherlv_30= 'stakeholder' ( ( ruleQualifiedName ) )+ ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 13);
            	    // InternalReqSpec.g:3818:9: ({...}? => (otherlv_29= 'development' otherlv_30= 'stakeholder' ( ( ruleQualifiedName ) )+ ) )
            	    // InternalReqSpec.g:3818:10: {...}? => (otherlv_29= 'development' otherlv_30= 'stakeholder' ( ( ruleQualifiedName ) )+ )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGlobalRequirement", "true");
            	    }
            	    // InternalReqSpec.g:3818:19: (otherlv_29= 'development' otherlv_30= 'stakeholder' ( ( ruleQualifiedName ) )+ )
            	    // InternalReqSpec.g:3818:20: otherlv_29= 'development' otherlv_30= 'stakeholder' ( ( ruleQualifiedName ) )+
            	    {
            	    otherlv_29=(Token)match(input,43,FollowSets000.FOLLOW_44); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_29, grammarAccess.getGlobalRequirementAccess().getDevelopmentKeyword_5_13_0());
            	      								
            	    }
            	    otherlv_30=(Token)match(input,20,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_30, grammarAccess.getGlobalRequirementAccess().getStakeholderKeyword_5_13_1());
            	      								
            	    }
            	    // InternalReqSpec.g:3826:9: ( ( ruleQualifiedName ) )+
            	    int cnt92=0;
            	    loop92:
            	    do {
            	        int alt92=2;
            	        int LA92_0 = input.LA(1);

            	        if ( (LA92_0==RULE_ID) ) {
            	            alt92=1;
            	        }


            	        switch (alt92) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:3827:10: ( ruleQualifiedName )
            	    	    {
            	    	    // InternalReqSpec.g:3827:10: ( ruleQualifiedName )
            	    	    // InternalReqSpec.g:3828:11: ruleQualifiedName
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      											if (current==null) {
            	    	      												current = createModelElement(grammarAccess.getGlobalRequirementRule());
            	    	      											}
            	    	      										
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      											newCompositeNode(grammarAccess.getGlobalRequirementAccess().getDevelopmentStakeholderStakeholderCrossReference_5_13_2_0());
            	    	      										
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_49);
            	    	    ruleQualifiedName();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      											afterParserOrEnumRuleCall();
            	    	      										
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt92 >= 1 ) break loop92;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(92, input);
            	                throw eee;
            	        }
            	        cnt92++;
            	    } while (true);


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 15 :
            	    // InternalReqSpec.g:3848:4: ({...}? => ( ({...}? => (otherlv_32= 'see' otherlv_33= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    {
            	    // InternalReqSpec.g:3848:4: ({...}? => ( ({...}? => (otherlv_32= 'see' otherlv_33= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    // InternalReqSpec.g:3849:5: {...}? => ( ({...}? => (otherlv_32= 'see' otherlv_33= 'goal' ( ( ruleQualifiedName ) )+ ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 14) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGlobalRequirement", "getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 14)");
            	    }
            	    // InternalReqSpec.g:3849:115: ( ({...}? => (otherlv_32= 'see' otherlv_33= 'goal' ( ( ruleQualifiedName ) )+ ) ) )
            	    // InternalReqSpec.g:3850:6: ({...}? => (otherlv_32= 'see' otherlv_33= 'goal' ( ( ruleQualifiedName ) )+ ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 14);
            	    // InternalReqSpec.g:3853:9: ({...}? => (otherlv_32= 'see' otherlv_33= 'goal' ( ( ruleQualifiedName ) )+ ) )
            	    // InternalReqSpec.g:3853:10: {...}? => (otherlv_32= 'see' otherlv_33= 'goal' ( ( ruleQualifiedName ) )+ )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGlobalRequirement", "true");
            	    }
            	    // InternalReqSpec.g:3853:19: (otherlv_32= 'see' otherlv_33= 'goal' ( ( ruleQualifiedName ) )+ )
            	    // InternalReqSpec.g:3853:20: otherlv_32= 'see' otherlv_33= 'goal' ( ( ruleQualifiedName ) )+
            	    {
            	    otherlv_32=(Token)match(input,25,FollowSets000.FOLLOW_40); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_32, grammarAccess.getGlobalRequirementAccess().getSeeKeyword_5_14_0());
            	      								
            	    }
            	    otherlv_33=(Token)match(input,32,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_33, grammarAccess.getGlobalRequirementAccess().getGoalKeyword_5_14_1());
            	      								
            	    }
            	    // InternalReqSpec.g:3861:9: ( ( ruleQualifiedName ) )+
            	    int cnt93=0;
            	    loop93:
            	    do {
            	        int alt93=2;
            	        int LA93_0 = input.LA(1);

            	        if ( (LA93_0==RULE_ID) ) {
            	            alt93=1;
            	        }


            	        switch (alt93) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:3862:10: ( ruleQualifiedName )
            	    	    {
            	    	    // InternalReqSpec.g:3862:10: ( ruleQualifiedName )
            	    	    // InternalReqSpec.g:3863:11: ruleQualifiedName
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      											if (current==null) {
            	    	      												current = createModelElement(grammarAccess.getGlobalRequirementRule());
            	    	      											}
            	    	      										
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      											newCompositeNode(grammarAccess.getGlobalRequirementAccess().getGoalReferenceGoalCrossReference_5_14_2_0());
            	    	      										
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_49);
            	    	    ruleQualifiedName();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      											afterParserOrEnumRuleCall();
            	    	      										
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt93 >= 1 ) break loop93;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(93, input);
            	                throw eee;
            	        }
            	        cnt93++;
            	    } while (true);


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 16 :
            	    // InternalReqSpec.g:3883:4: ({...}? => ( ({...}? => (otherlv_35= 'see' otherlv_36= 'requirement' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    {
            	    // InternalReqSpec.g:3883:4: ({...}? => ( ({...}? => (otherlv_35= 'see' otherlv_36= 'requirement' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    // InternalReqSpec.g:3884:5: {...}? => ( ({...}? => (otherlv_35= 'see' otherlv_36= 'requirement' ( ( ruleQualifiedName ) )+ ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 15) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGlobalRequirement", "getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 15)");
            	    }
            	    // InternalReqSpec.g:3884:115: ( ({...}? => (otherlv_35= 'see' otherlv_36= 'requirement' ( ( ruleQualifiedName ) )+ ) ) )
            	    // InternalReqSpec.g:3885:6: ({...}? => (otherlv_35= 'see' otherlv_36= 'requirement' ( ( ruleQualifiedName ) )+ ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 15);
            	    // InternalReqSpec.g:3888:9: ({...}? => (otherlv_35= 'see' otherlv_36= 'requirement' ( ( ruleQualifiedName ) )+ ) )
            	    // InternalReqSpec.g:3888:10: {...}? => (otherlv_35= 'see' otherlv_36= 'requirement' ( ( ruleQualifiedName ) )+ )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGlobalRequirement", "true");
            	    }
            	    // InternalReqSpec.g:3888:19: (otherlv_35= 'see' otherlv_36= 'requirement' ( ( ruleQualifiedName ) )+ )
            	    // InternalReqSpec.g:3888:20: otherlv_35= 'see' otherlv_36= 'requirement' ( ( ruleQualifiedName ) )+
            	    {
            	    otherlv_35=(Token)match(input,25,FollowSets000.FOLLOW_45); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_35, grammarAccess.getGlobalRequirementAccess().getSeeKeyword_5_15_0());
            	      								
            	    }
            	    otherlv_36=(Token)match(input,39,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_36, grammarAccess.getGlobalRequirementAccess().getRequirementKeyword_5_15_1());
            	      								
            	    }
            	    // InternalReqSpec.g:3896:9: ( ( ruleQualifiedName ) )+
            	    int cnt94=0;
            	    loop94:
            	    do {
            	        int alt94=2;
            	        int LA94_0 = input.LA(1);

            	        if ( (LA94_0==RULE_ID) ) {
            	            alt94=1;
            	        }


            	        switch (alt94) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:3897:10: ( ruleQualifiedName )
            	    	    {
            	    	    // InternalReqSpec.g:3897:10: ( ruleQualifiedName )
            	    	    // InternalReqSpec.g:3898:11: ruleQualifiedName
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      											if (current==null) {
            	    	      												current = createModelElement(grammarAccess.getGlobalRequirementRule());
            	    	      											}
            	    	      										
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      											newCompositeNode(grammarAccess.getGlobalRequirementAccess().getRequirementReferenceRequirementCrossReference_5_15_2_0());
            	    	      										
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_49);
            	    	    ruleQualifiedName();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      											afterParserOrEnumRuleCall();
            	    	      										
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt94 >= 1 ) break loop94;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(94, input);
            	                throw eee;
            	        }
            	        cnt94++;
            	    } while (true);


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 17 :
            	    // InternalReqSpec.g:3918:4: ({...}? => ( ({...}? => (otherlv_38= 'see' otherlv_39= 'document' ( (lv_docReference_40_0= ruleExternalDocument ) )+ ) ) ) )
            	    {
            	    // InternalReqSpec.g:3918:4: ({...}? => ( ({...}? => (otherlv_38= 'see' otherlv_39= 'document' ( (lv_docReference_40_0= ruleExternalDocument ) )+ ) ) ) )
            	    // InternalReqSpec.g:3919:5: {...}? => ( ({...}? => (otherlv_38= 'see' otherlv_39= 'document' ( (lv_docReference_40_0= ruleExternalDocument ) )+ ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 16) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGlobalRequirement", "getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 16)");
            	    }
            	    // InternalReqSpec.g:3919:115: ( ({...}? => (otherlv_38= 'see' otherlv_39= 'document' ( (lv_docReference_40_0= ruleExternalDocument ) )+ ) ) )
            	    // InternalReqSpec.g:3920:6: ({...}? => (otherlv_38= 'see' otherlv_39= 'document' ( (lv_docReference_40_0= ruleExternalDocument ) )+ ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 16);
            	    // InternalReqSpec.g:3923:9: ({...}? => (otherlv_38= 'see' otherlv_39= 'document' ( (lv_docReference_40_0= ruleExternalDocument ) )+ ) )
            	    // InternalReqSpec.g:3923:10: {...}? => (otherlv_38= 'see' otherlv_39= 'document' ( (lv_docReference_40_0= ruleExternalDocument ) )+ )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGlobalRequirement", "true");
            	    }
            	    // InternalReqSpec.g:3923:19: (otherlv_38= 'see' otherlv_39= 'document' ( (lv_docReference_40_0= ruleExternalDocument ) )+ )
            	    // InternalReqSpec.g:3923:20: otherlv_38= 'see' otherlv_39= 'document' ( (lv_docReference_40_0= ruleExternalDocument ) )+
            	    {
            	    otherlv_38=(Token)match(input,25,FollowSets000.FOLLOW_17); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_38, grammarAccess.getGlobalRequirementAccess().getSeeKeyword_5_16_0());
            	      								
            	    }
            	    otherlv_39=(Token)match(input,26,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_39, grammarAccess.getGlobalRequirementAccess().getDocumentKeyword_5_16_1());
            	      								
            	    }
            	    // InternalReqSpec.g:3931:9: ( (lv_docReference_40_0= ruleExternalDocument ) )+
            	    int cnt95=0;
            	    loop95:
            	    do {
            	        int alt95=2;
            	        int LA95_0 = input.LA(1);

            	        if ( (LA95_0==RULE_ID) ) {
            	            alt95=1;
            	        }


            	        switch (alt95) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:3932:10: (lv_docReference_40_0= ruleExternalDocument )
            	    	    {
            	    	    // InternalReqSpec.g:3932:10: (lv_docReference_40_0= ruleExternalDocument )
            	    	    // InternalReqSpec.g:3933:11: lv_docReference_40_0= ruleExternalDocument
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      											newCompositeNode(grammarAccess.getGlobalRequirementAccess().getDocReferenceExternalDocumentParserRuleCall_5_16_2_0());
            	    	      										
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_49);
            	    	    lv_docReference_40_0=ruleExternalDocument();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      											if (current==null) {
            	    	      												current = createModelElementForParent(grammarAccess.getGlobalRequirementRule());
            	    	      											}
            	    	      											add(
            	    	      												current,
            	    	      												"docReference",
            	    	      												lv_docReference_40_0,
            	    	      												"org.osate.reqspec.ReqSpec.ExternalDocument");
            	    	      											afterParserOrEnumRuleCall();
            	    	      										
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt95 >= 1 ) break loop95;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(95, input);
            	                throw eee;
            	        }
            	        cnt95++;
            	    } while (true);


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 18 :
            	    // InternalReqSpec.g:3956:4: ({...}? => ( ({...}? => (otherlv_41= 'issues' ( (lv_issues_42_0= RULE_STRING ) )+ ) ) ) )
            	    {
            	    // InternalReqSpec.g:3956:4: ({...}? => ( ({...}? => (otherlv_41= 'issues' ( (lv_issues_42_0= RULE_STRING ) )+ ) ) ) )
            	    // InternalReqSpec.g:3957:5: {...}? => ( ({...}? => (otherlv_41= 'issues' ( (lv_issues_42_0= RULE_STRING ) )+ ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 17) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGlobalRequirement", "getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 17)");
            	    }
            	    // InternalReqSpec.g:3957:115: ( ({...}? => (otherlv_41= 'issues' ( (lv_issues_42_0= RULE_STRING ) )+ ) ) )
            	    // InternalReqSpec.g:3958:6: ({...}? => (otherlv_41= 'issues' ( (lv_issues_42_0= RULE_STRING ) )+ ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 17);
            	    // InternalReqSpec.g:3961:9: ({...}? => (otherlv_41= 'issues' ( (lv_issues_42_0= RULE_STRING ) )+ ) )
            	    // InternalReqSpec.g:3961:10: {...}? => (otherlv_41= 'issues' ( (lv_issues_42_0= RULE_STRING ) )+ )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleGlobalRequirement", "true");
            	    }
            	    // InternalReqSpec.g:3961:19: (otherlv_41= 'issues' ( (lv_issues_42_0= RULE_STRING ) )+ )
            	    // InternalReqSpec.g:3961:20: otherlv_41= 'issues' ( (lv_issues_42_0= RULE_STRING ) )+
            	    {
            	    otherlv_41=(Token)match(input,27,FollowSets000.FOLLOW_9); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_41, grammarAccess.getGlobalRequirementAccess().getIssuesKeyword_5_17_0());
            	      								
            	    }
            	    // InternalReqSpec.g:3965:9: ( (lv_issues_42_0= RULE_STRING ) )+
            	    int cnt96=0;
            	    loop96:
            	    do {
            	        int alt96=2;
            	        int LA96_0 = input.LA(1);

            	        if ( (LA96_0==RULE_STRING) ) {
            	            alt96=1;
            	        }


            	        switch (alt96) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:3966:10: (lv_issues_42_0= RULE_STRING )
            	    	    {
            	    	    // InternalReqSpec.g:3966:10: (lv_issues_42_0= RULE_STRING )
            	    	    // InternalReqSpec.g:3967:11: lv_issues_42_0= RULE_STRING
            	    	    {
            	    	    lv_issues_42_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_50); if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      											newLeafNode(lv_issues_42_0, grammarAccess.getGlobalRequirementAccess().getIssuesSTRINGTerminalRuleCall_5_17_1_0());
            	    	      										
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      											if (current==null) {
            	    	      												current = createModelElement(grammarAccess.getGlobalRequirementRule());
            	    	      											}
            	    	      											addWithLastConsumed(
            	    	      												current,
            	    	      												"issues",
            	    	      												lv_issues_42_0,
            	    	      												"org.eclipse.xtext.common.Terminals.STRING");
            	    	      										
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt96 >= 1 ) break loop96;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(96, input);
            	                throw eee;
            	        }
            	        cnt96++;
            	    } while (true);


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop97;
                }
            } while (true);


            }


            }

            getUnorderedGroupHelper().leave(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5());

            }

            otherlv_43=(Token)match(input,19,FollowSets000.FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_43, grammarAccess.getGlobalRequirementAccess().getRightSquareBracketKeyword_6());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleGlobalRequirement"


    // $ANTLR start "entryRuleDocRequirement"
    // InternalReqSpec.g:4004:1: entryRuleDocRequirement returns [EObject current=null] : iv_ruleDocRequirement= ruleDocRequirement EOF ;
    public final EObject entryRuleDocRequirement() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDocRequirement = null;


        try {
            // InternalReqSpec.g:4004:55: (iv_ruleDocRequirement= ruleDocRequirement EOF )
            // InternalReqSpec.g:4005:2: iv_ruleDocRequirement= ruleDocRequirement EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getDocRequirementRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleDocRequirement=ruleDocRequirement();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleDocRequirement; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDocRequirement"


    // $ANTLR start "ruleDocRequirement"
    // InternalReqSpec.g:4011:1: ruleDocRequirement returns [EObject current=null] : (otherlv_0= 'requirement' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? (otherlv_4= 'for' ( ( (lv_targetDescription_5_0= RULE_STRING ) ) | ( ( ( ruleAadlClassifierReference ) ) ( (otherlv_7= RULE_ID ) )? ) | ( (lv_componentCategory_8_0= ruleComponentCategory ) )+ ) )? otherlv_9= '[' ( ( ( ( ({...}? => ( ({...}? => (otherlv_11= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_13_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_computes_15_0= ruleComputeDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_16_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_predicate_17_0= ruleReqPredicate ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_18_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_19_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_20= 'mitigates' ( ( (otherlv_21= RULE_ID ) ) | ( (lv_exceptionText_22_0= RULE_STRING ) ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'decomposes' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'inherits' ( ( ruleQualifiedName ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_31_0= 'dropped' ) ) ( (lv_dropRationale_32_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_33= 'development' otherlv_34= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_36= 'see' otherlv_37= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_39= 'see' otherlv_40= 'document' ( (lv_docReference_41_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'issues' ( (lv_issues_43_0= RULE_STRING ) )+ ) ) ) ) )* ) ) ) otherlv_44= ']' ) ;
    public final EObject ruleDocRequirement() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token lv_title_3_0=null;
        Token otherlv_4=null;
        Token lv_targetDescription_5_0=null;
        Token otherlv_7=null;
        Token otherlv_9=null;
        Token otherlv_11=null;
        Token otherlv_20=null;
        Token otherlv_21=null;
        Token lv_exceptionText_22_0=null;
        Token otherlv_23=null;
        Token otherlv_25=null;
        Token otherlv_27=null;
        Token otherlv_29=null;
        Token lv_dropped_31_0=null;
        Token lv_dropRationale_32_0=null;
        Token otherlv_33=null;
        Token otherlv_34=null;
        Token otherlv_36=null;
        Token otherlv_37=null;
        Token otherlv_39=null;
        Token otherlv_40=null;
        Token otherlv_42=null;
        Token lv_issues_43_0=null;
        Token otherlv_44=null;
        AntlrDatatypeRuleToken lv_componentCategory_8_0 = null;

        EObject lv_description_13_0 = null;

        EObject lv_constants_14_0 = null;

        EObject lv_computes_15_0 = null;

        EObject lv_whencondition_16_0 = null;

        EObject lv_predicate_17_0 = null;

        EObject lv_rationale_18_0 = null;

        EObject lv_changeUncertainty_19_0 = null;

        EObject lv_docReference_41_0 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:4017:2: ( (otherlv_0= 'requirement' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? (otherlv_4= 'for' ( ( (lv_targetDescription_5_0= RULE_STRING ) ) | ( ( ( ruleAadlClassifierReference ) ) ( (otherlv_7= RULE_ID ) )? ) | ( (lv_componentCategory_8_0= ruleComponentCategory ) )+ ) )? otherlv_9= '[' ( ( ( ( ({...}? => ( ({...}? => (otherlv_11= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_13_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_computes_15_0= ruleComputeDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_16_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_predicate_17_0= ruleReqPredicate ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_18_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_19_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_20= 'mitigates' ( ( (otherlv_21= RULE_ID ) ) | ( (lv_exceptionText_22_0= RULE_STRING ) ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'decomposes' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'inherits' ( ( ruleQualifiedName ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_31_0= 'dropped' ) ) ( (lv_dropRationale_32_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_33= 'development' otherlv_34= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_36= 'see' otherlv_37= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_39= 'see' otherlv_40= 'document' ( (lv_docReference_41_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'issues' ( (lv_issues_43_0= RULE_STRING ) )+ ) ) ) ) )* ) ) ) otherlv_44= ']' ) )
            // InternalReqSpec.g:4018:2: (otherlv_0= 'requirement' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? (otherlv_4= 'for' ( ( (lv_targetDescription_5_0= RULE_STRING ) ) | ( ( ( ruleAadlClassifierReference ) ) ( (otherlv_7= RULE_ID ) )? ) | ( (lv_componentCategory_8_0= ruleComponentCategory ) )+ ) )? otherlv_9= '[' ( ( ( ( ({...}? => ( ({...}? => (otherlv_11= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_13_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_computes_15_0= ruleComputeDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_16_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_predicate_17_0= ruleReqPredicate ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_18_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_19_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_20= 'mitigates' ( ( (otherlv_21= RULE_ID ) ) | ( (lv_exceptionText_22_0= RULE_STRING ) ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'decomposes' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'inherits' ( ( ruleQualifiedName ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_31_0= 'dropped' ) ) ( (lv_dropRationale_32_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_33= 'development' otherlv_34= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_36= 'see' otherlv_37= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_39= 'see' otherlv_40= 'document' ( (lv_docReference_41_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'issues' ( (lv_issues_43_0= RULE_STRING ) )+ ) ) ) ) )* ) ) ) otherlv_44= ']' )
            {
            // InternalReqSpec.g:4018:2: (otherlv_0= 'requirement' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? (otherlv_4= 'for' ( ( (lv_targetDescription_5_0= RULE_STRING ) ) | ( ( ( ruleAadlClassifierReference ) ) ( (otherlv_7= RULE_ID ) )? ) | ( (lv_componentCategory_8_0= ruleComponentCategory ) )+ ) )? otherlv_9= '[' ( ( ( ( ({...}? => ( ({...}? => (otherlv_11= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_13_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_computes_15_0= ruleComputeDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_16_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_predicate_17_0= ruleReqPredicate ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_18_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_19_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_20= 'mitigates' ( ( (otherlv_21= RULE_ID ) ) | ( (lv_exceptionText_22_0= RULE_STRING ) ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'decomposes' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'inherits' ( ( ruleQualifiedName ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_31_0= 'dropped' ) ) ( (lv_dropRationale_32_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_33= 'development' otherlv_34= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_36= 'see' otherlv_37= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_39= 'see' otherlv_40= 'document' ( (lv_docReference_41_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'issues' ( (lv_issues_43_0= RULE_STRING ) )+ ) ) ) ) )* ) ) ) otherlv_44= ']' )
            // InternalReqSpec.g:4019:3: otherlv_0= 'requirement' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )? (otherlv_4= 'for' ( ( (lv_targetDescription_5_0= RULE_STRING ) ) | ( ( ( ruleAadlClassifierReference ) ) ( (otherlv_7= RULE_ID ) )? ) | ( (lv_componentCategory_8_0= ruleComponentCategory ) )+ ) )? otherlv_9= '[' ( ( ( ( ({...}? => ( ({...}? => (otherlv_11= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_13_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_computes_15_0= ruleComputeDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_16_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_predicate_17_0= ruleReqPredicate ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_18_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_19_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_20= 'mitigates' ( ( (otherlv_21= RULE_ID ) ) | ( (lv_exceptionText_22_0= RULE_STRING ) ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'decomposes' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'inherits' ( ( ruleQualifiedName ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_31_0= 'dropped' ) ) ( (lv_dropRationale_32_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_33= 'development' otherlv_34= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_36= 'see' otherlv_37= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_39= 'see' otherlv_40= 'document' ( (lv_docReference_41_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'issues' ( (lv_issues_43_0= RULE_STRING ) )+ ) ) ) ) )* ) ) ) otherlv_44= ']'
            {
            otherlv_0=(Token)match(input,39,FollowSets000.FOLLOW_4); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getDocRequirementAccess().getRequirementKeyword_0());
              		
            }
            // InternalReqSpec.g:4023:3: ( (lv_name_1_0= RULE_ID ) )
            // InternalReqSpec.g:4024:4: (lv_name_1_0= RULE_ID )
            {
            // InternalReqSpec.g:4024:4: (lv_name_1_0= RULE_ID )
            // InternalReqSpec.g:4025:5: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_34); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_1_0, grammarAccess.getDocRequirementAccess().getNameIDTerminalRuleCall_1_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getDocRequirementRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_1_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalReqSpec.g:4041:3: (otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) ) )?
            int alt98=2;
            int LA98_0 = input.LA(1);

            if ( (LA98_0==22) ) {
                alt98=1;
            }
            switch (alt98) {
                case 1 :
                    // InternalReqSpec.g:4042:4: otherlv_2= ':' ( (lv_title_3_0= RULE_STRING ) )
                    {
                    otherlv_2=(Token)match(input,22,FollowSets000.FOLLOW_9); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_2, grammarAccess.getDocRequirementAccess().getColonKeyword_2_0());
                      			
                    }
                    // InternalReqSpec.g:4046:4: ( (lv_title_3_0= RULE_STRING ) )
                    // InternalReqSpec.g:4047:5: (lv_title_3_0= RULE_STRING )
                    {
                    // InternalReqSpec.g:4047:5: (lv_title_3_0= RULE_STRING )
                    // InternalReqSpec.g:4048:6: lv_title_3_0= RULE_STRING
                    {
                    lv_title_3_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_35); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_title_3_0, grammarAccess.getDocRequirementAccess().getTitleSTRINGTerminalRuleCall_2_1_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getDocRequirementRule());
                      						}
                      						setWithLastConsumed(
                      							current,
                      							"title",
                      							lv_title_3_0,
                      							"org.eclipse.xtext.common.Terminals.STRING");
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            // InternalReqSpec.g:4065:3: (otherlv_4= 'for' ( ( (lv_targetDescription_5_0= RULE_STRING ) ) | ( ( ( ruleAadlClassifierReference ) ) ( (otherlv_7= RULE_ID ) )? ) | ( (lv_componentCategory_8_0= ruleComponentCategory ) )+ ) )?
            int alt102=2;
            int LA102_0 = input.LA(1);

            if ( (LA102_0==23) ) {
                alt102=1;
            }
            switch (alt102) {
                case 1 :
                    // InternalReqSpec.g:4066:4: otherlv_4= 'for' ( ( (lv_targetDescription_5_0= RULE_STRING ) ) | ( ( ( ruleAadlClassifierReference ) ) ( (otherlv_7= RULE_ID ) )? ) | ( (lv_componentCategory_8_0= ruleComponentCategory ) )+ )
                    {
                    otherlv_4=(Token)match(input,23,FollowSets000.FOLLOW_51); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_4, grammarAccess.getDocRequirementAccess().getForKeyword_3_0());
                      			
                    }
                    // InternalReqSpec.g:4070:4: ( ( (lv_targetDescription_5_0= RULE_STRING ) ) | ( ( ( ruleAadlClassifierReference ) ) ( (otherlv_7= RULE_ID ) )? ) | ( (lv_componentCategory_8_0= ruleComponentCategory ) )+ )
                    int alt101=3;
                    switch ( input.LA(1) ) {
                    case RULE_STRING:
                        {
                        alt101=1;
                        }
                        break;
                    case RULE_ID:
                        {
                        alt101=2;
                        }
                        break;
                    case 29:
                    case 108:
                    case 109:
                    case 110:
                    case 111:
                    case 112:
                    case 113:
                    case 114:
                    case 115:
                    case 117:
                    case 118:
                        {
                        alt101=3;
                        }
                        break;
                    default:
                        if (state.backtracking>0) {state.failed=true; return current;}
                        NoViableAltException nvae =
                            new NoViableAltException("", 101, 0, input);

                        throw nvae;
                    }

                    switch (alt101) {
                        case 1 :
                            // InternalReqSpec.g:4071:5: ( (lv_targetDescription_5_0= RULE_STRING ) )
                            {
                            // InternalReqSpec.g:4071:5: ( (lv_targetDescription_5_0= RULE_STRING ) )
                            // InternalReqSpec.g:4072:6: (lv_targetDescription_5_0= RULE_STRING )
                            {
                            // InternalReqSpec.g:4072:6: (lv_targetDescription_5_0= RULE_STRING )
                            // InternalReqSpec.g:4073:7: lv_targetDescription_5_0= RULE_STRING
                            {
                            lv_targetDescription_5_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_5); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							newLeafNode(lv_targetDescription_5_0, grammarAccess.getDocRequirementAccess().getTargetDescriptionSTRINGTerminalRuleCall_3_1_0_0());
                              						
                            }
                            if ( state.backtracking==0 ) {

                              							if (current==null) {
                              								current = createModelElement(grammarAccess.getDocRequirementRule());
                              							}
                              							setWithLastConsumed(
                              								current,
                              								"targetDescription",
                              								lv_targetDescription_5_0,
                              								"org.eclipse.xtext.common.Terminals.STRING");
                              						
                            }

                            }


                            }


                            }
                            break;
                        case 2 :
                            // InternalReqSpec.g:4090:5: ( ( ( ruleAadlClassifierReference ) ) ( (otherlv_7= RULE_ID ) )? )
                            {
                            // InternalReqSpec.g:4090:5: ( ( ( ruleAadlClassifierReference ) ) ( (otherlv_7= RULE_ID ) )? )
                            // InternalReqSpec.g:4091:6: ( ( ruleAadlClassifierReference ) ) ( (otherlv_7= RULE_ID ) )?
                            {
                            // InternalReqSpec.g:4091:6: ( ( ruleAadlClassifierReference ) )
                            // InternalReqSpec.g:4092:7: ( ruleAadlClassifierReference )
                            {
                            // InternalReqSpec.g:4092:7: ( ruleAadlClassifierReference )
                            // InternalReqSpec.g:4093:8: ruleAadlClassifierReference
                            {
                            if ( state.backtracking==0 ) {

                              								if (current==null) {
                              									current = createModelElement(grammarAccess.getDocRequirementRule());
                              								}
                              							
                            }
                            if ( state.backtracking==0 ) {

                              								newCompositeNode(grammarAccess.getDocRequirementAccess().getTargetComponentClassifierCrossReference_3_1_1_0_0());
                              							
                            }
                            pushFollow(FollowSets000.FOLLOW_15);
                            ruleAadlClassifierReference();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              								afterParserOrEnumRuleCall();
                              							
                            }

                            }


                            }

                            // InternalReqSpec.g:4107:6: ( (otherlv_7= RULE_ID ) )?
                            int alt99=2;
                            int LA99_0 = input.LA(1);

                            if ( (LA99_0==RULE_ID) ) {
                                alt99=1;
                            }
                            switch (alt99) {
                                case 1 :
                                    // InternalReqSpec.g:4108:7: (otherlv_7= RULE_ID )
                                    {
                                    // InternalReqSpec.g:4108:7: (otherlv_7= RULE_ID )
                                    // InternalReqSpec.g:4109:8: otherlv_7= RULE_ID
                                    {
                                    if ( state.backtracking==0 ) {

                                      								if (current==null) {
                                      									current = createModelElement(grammarAccess.getDocRequirementRule());
                                      								}
                                      							
                                    }
                                    otherlv_7=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_5); if (state.failed) return current;
                                    if ( state.backtracking==0 ) {

                                      								newLeafNode(otherlv_7, grammarAccess.getDocRequirementAccess().getTargetElementNamedElementCrossReference_3_1_1_1_0());
                                      							
                                    }

                                    }


                                    }
                                    break;

                            }


                            }


                            }
                            break;
                        case 3 :
                            // InternalReqSpec.g:4122:5: ( (lv_componentCategory_8_0= ruleComponentCategory ) )+
                            {
                            // InternalReqSpec.g:4122:5: ( (lv_componentCategory_8_0= ruleComponentCategory ) )+
                            int cnt100=0;
                            loop100:
                            do {
                                int alt100=2;
                                int LA100_0 = input.LA(1);

                                if ( (LA100_0==29||(LA100_0>=108 && LA100_0<=115)||(LA100_0>=117 && LA100_0<=118)) ) {
                                    alt100=1;
                                }


                                switch (alt100) {
                            	case 1 :
                            	    // InternalReqSpec.g:4123:6: (lv_componentCategory_8_0= ruleComponentCategory )
                            	    {
                            	    // InternalReqSpec.g:4123:6: (lv_componentCategory_8_0= ruleComponentCategory )
                            	    // InternalReqSpec.g:4124:7: lv_componentCategory_8_0= ruleComponentCategory
                            	    {
                            	    if ( state.backtracking==0 ) {

                            	      							newCompositeNode(grammarAccess.getDocRequirementAccess().getComponentCategoryComponentCategoryParserRuleCall_3_1_2_0());
                            	      						
                            	    }
                            	    pushFollow(FollowSets000.FOLLOW_47);
                            	    lv_componentCategory_8_0=ruleComponentCategory();

                            	    state._fsp--;
                            	    if (state.failed) return current;
                            	    if ( state.backtracking==0 ) {

                            	      							if (current==null) {
                            	      								current = createModelElementForParent(grammarAccess.getDocRequirementRule());
                            	      							}
                            	      							add(
                            	      								current,
                            	      								"componentCategory",
                            	      								lv_componentCategory_8_0,
                            	      								"org.osate.alisa.common.Common.ComponentCategory");
                            	      							afterParserOrEnumRuleCall();
                            	      						
                            	    }

                            	    }


                            	    }
                            	    break;

                            	default :
                            	    if ( cnt100 >= 1 ) break loop100;
                            	    if (state.backtracking>0) {state.failed=true; return current;}
                                        EarlyExitException eee =
                                            new EarlyExitException(100, input);
                                        throw eee;
                                }
                                cnt100++;
                            } while (true);


                            }
                            break;

                    }


                    }
                    break;

            }

            otherlv_9=(Token)match(input,18,FollowSets000.FOLLOW_41); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_9, grammarAccess.getDocRequirementAccess().getLeftSquareBracketKeyword_4());
              		
            }
            // InternalReqSpec.g:4147:3: ( ( ( ( ({...}? => ( ({...}? => (otherlv_11= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_13_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_computes_15_0= ruleComputeDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_16_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_predicate_17_0= ruleReqPredicate ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_18_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_19_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_20= 'mitigates' ( ( (otherlv_21= RULE_ID ) ) | ( (lv_exceptionText_22_0= RULE_STRING ) ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'decomposes' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'inherits' ( ( ruleQualifiedName ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_31_0= 'dropped' ) ) ( (lv_dropRationale_32_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_33= 'development' otherlv_34= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_36= 'see' otherlv_37= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_39= 'see' otherlv_40= 'document' ( (lv_docReference_41_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'issues' ( (lv_issues_43_0= RULE_STRING ) )+ ) ) ) ) )* ) ) )
            // InternalReqSpec.g:4148:4: ( ( ( ({...}? => ( ({...}? => (otherlv_11= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_13_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_computes_15_0= ruleComputeDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_16_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_predicate_17_0= ruleReqPredicate ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_18_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_19_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_20= 'mitigates' ( ( (otherlv_21= RULE_ID ) ) | ( (lv_exceptionText_22_0= RULE_STRING ) ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'decomposes' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'inherits' ( ( ruleQualifiedName ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_31_0= 'dropped' ) ) ( (lv_dropRationale_32_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_33= 'development' otherlv_34= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_36= 'see' otherlv_37= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_39= 'see' otherlv_40= 'document' ( (lv_docReference_41_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'issues' ( (lv_issues_43_0= RULE_STRING ) )+ ) ) ) ) )* ) )
            {
            // InternalReqSpec.g:4148:4: ( ( ( ({...}? => ( ({...}? => (otherlv_11= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_13_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_computes_15_0= ruleComputeDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_16_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_predicate_17_0= ruleReqPredicate ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_18_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_19_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_20= 'mitigates' ( ( (otherlv_21= RULE_ID ) ) | ( (lv_exceptionText_22_0= RULE_STRING ) ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'decomposes' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'inherits' ( ( ruleQualifiedName ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_31_0= 'dropped' ) ) ( (lv_dropRationale_32_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_33= 'development' otherlv_34= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_36= 'see' otherlv_37= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_39= 'see' otherlv_40= 'document' ( (lv_docReference_41_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'issues' ( (lv_issues_43_0= RULE_STRING ) )+ ) ) ) ) )* ) )
            // InternalReqSpec.g:4149:5: ( ( ({...}? => ( ({...}? => (otherlv_11= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_13_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_computes_15_0= ruleComputeDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_16_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_predicate_17_0= ruleReqPredicate ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_18_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_19_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_20= 'mitigates' ( ( (otherlv_21= RULE_ID ) ) | ( (lv_exceptionText_22_0= RULE_STRING ) ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'decomposes' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'inherits' ( ( ruleQualifiedName ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_31_0= 'dropped' ) ) ( (lv_dropRationale_32_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_33= 'development' otherlv_34= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_36= 'see' otherlv_37= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_39= 'see' otherlv_40= 'document' ( (lv_docReference_41_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'issues' ( (lv_issues_43_0= RULE_STRING ) )+ ) ) ) ) )* )
            {
            getUnorderedGroupHelper().enter(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5());
            // InternalReqSpec.g:4152:5: ( ( ({...}? => ( ({...}? => (otherlv_11= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_13_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_computes_15_0= ruleComputeDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_16_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_predicate_17_0= ruleReqPredicate ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_18_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_19_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_20= 'mitigates' ( ( (otherlv_21= RULE_ID ) ) | ( (lv_exceptionText_22_0= RULE_STRING ) ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'decomposes' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'inherits' ( ( ruleQualifiedName ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_31_0= 'dropped' ) ) ( (lv_dropRationale_32_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_33= 'development' otherlv_34= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_36= 'see' otherlv_37= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_39= 'see' otherlv_40= 'document' ( (lv_docReference_41_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'issues' ( (lv_issues_43_0= RULE_STRING ) )+ ) ) ) ) )* )
            // InternalReqSpec.g:4153:6: ( ({...}? => ( ({...}? => (otherlv_11= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_13_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_computes_15_0= ruleComputeDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_16_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_predicate_17_0= ruleReqPredicate ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_18_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_19_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_20= 'mitigates' ( ( (otherlv_21= RULE_ID ) ) | ( (lv_exceptionText_22_0= RULE_STRING ) ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'decomposes' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'inherits' ( ( ruleQualifiedName ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_31_0= 'dropped' ) ) ( (lv_dropRationale_32_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_33= 'development' otherlv_34= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_36= 'see' otherlv_37= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_39= 'see' otherlv_40= 'document' ( (lv_docReference_41_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'issues' ( (lv_issues_43_0= RULE_STRING ) )+ ) ) ) ) )*
            {
            // InternalReqSpec.g:4153:6: ( ({...}? => ( ({...}? => (otherlv_11= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_13_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_computes_15_0= ruleComputeDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_16_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_predicate_17_0= ruleReqPredicate ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_18_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_19_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_20= 'mitigates' ( ( (otherlv_21= RULE_ID ) ) | ( (lv_exceptionText_22_0= RULE_STRING ) ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'decomposes' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'inherits' ( ( ruleQualifiedName ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_31_0= 'dropped' ) ) ( (lv_dropRationale_32_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_33= 'development' otherlv_34= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_36= 'see' otherlv_37= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_39= 'see' otherlv_40= 'document' ( (lv_docReference_41_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'issues' ( (lv_issues_43_0= RULE_STRING ) )+ ) ) ) ) )*
            loop115:
            do {
                int alt115=19;
                alt115 = dfa115.predict(input);
                switch (alt115) {
            	case 1 :
            	    // InternalReqSpec.g:4154:4: ({...}? => ( ({...}? => (otherlv_11= 'category' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    {
            	    // InternalReqSpec.g:4154:4: ({...}? => ( ({...}? => (otherlv_11= 'category' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    // InternalReqSpec.g:4155:5: {...}? => ( ({...}? => (otherlv_11= 'category' ( ( ruleQualifiedName ) )+ ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 0) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocRequirement", "getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 0)");
            	    }
            	    // InternalReqSpec.g:4155:111: ( ({...}? => (otherlv_11= 'category' ( ( ruleQualifiedName ) )+ ) ) )
            	    // InternalReqSpec.g:4156:6: ({...}? => (otherlv_11= 'category' ( ( ruleQualifiedName ) )+ ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 0);
            	    // InternalReqSpec.g:4159:9: ({...}? => (otherlv_11= 'category' ( ( ruleQualifiedName ) )+ ) )
            	    // InternalReqSpec.g:4159:10: {...}? => (otherlv_11= 'category' ( ( ruleQualifiedName ) )+ )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocRequirement", "true");
            	    }
            	    // InternalReqSpec.g:4159:19: (otherlv_11= 'category' ( ( ruleQualifiedName ) )+ )
            	    // InternalReqSpec.g:4159:20: otherlv_11= 'category' ( ( ruleQualifiedName ) )+
            	    {
            	    otherlv_11=(Token)match(input,33,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_11, grammarAccess.getDocRequirementAccess().getCategoryKeyword_5_0_0());
            	      								
            	    }
            	    // InternalReqSpec.g:4163:9: ( ( ruleQualifiedName ) )+
            	    int cnt103=0;
            	    loop103:
            	    do {
            	        int alt103=2;
            	        int LA103_0 = input.LA(1);

            	        if ( (LA103_0==RULE_ID) ) {
            	            alt103=1;
            	        }


            	        switch (alt103) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:4164:10: ( ruleQualifiedName )
            	    	    {
            	    	    // InternalReqSpec.g:4164:10: ( ruleQualifiedName )
            	    	    // InternalReqSpec.g:4165:11: ruleQualifiedName
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      											if (current==null) {
            	    	      												current = createModelElement(grammarAccess.getDocRequirementRule());
            	    	      											}
            	    	      										
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      											newCompositeNode(grammarAccess.getDocRequirementAccess().getCategoryCategoryCrossReference_5_0_1_0());
            	    	      										
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_42);
            	    	    ruleQualifiedName();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      											afterParserOrEnumRuleCall();
            	    	      										
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt103 >= 1 ) break loop103;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(103, input);
            	                throw eee;
            	        }
            	        cnt103++;
            	    } while (true);


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // InternalReqSpec.g:4185:4: ({...}? => ( ({...}? => ( (lv_description_13_0= ruleDescription ) ) ) ) )
            	    {
            	    // InternalReqSpec.g:4185:4: ({...}? => ( ({...}? => ( (lv_description_13_0= ruleDescription ) ) ) ) )
            	    // InternalReqSpec.g:4186:5: {...}? => ( ({...}? => ( (lv_description_13_0= ruleDescription ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 1) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocRequirement", "getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 1)");
            	    }
            	    // InternalReqSpec.g:4186:111: ( ({...}? => ( (lv_description_13_0= ruleDescription ) ) ) )
            	    // InternalReqSpec.g:4187:6: ({...}? => ( (lv_description_13_0= ruleDescription ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 1);
            	    // InternalReqSpec.g:4190:9: ({...}? => ( (lv_description_13_0= ruleDescription ) ) )
            	    // InternalReqSpec.g:4190:10: {...}? => ( (lv_description_13_0= ruleDescription ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocRequirement", "true");
            	    }
            	    // InternalReqSpec.g:4190:19: ( (lv_description_13_0= ruleDescription ) )
            	    // InternalReqSpec.g:4190:20: (lv_description_13_0= ruleDescription )
            	    {
            	    // InternalReqSpec.g:4190:20: (lv_description_13_0= ruleDescription )
            	    // InternalReqSpec.g:4191:10: lv_description_13_0= ruleDescription
            	    {
            	    if ( state.backtracking==0 ) {

            	      										newCompositeNode(grammarAccess.getDocRequirementAccess().getDescriptionDescriptionParserRuleCall_5_1_0());
            	      									
            	    }
            	    pushFollow(FollowSets000.FOLLOW_41);
            	    lv_description_13_0=ruleDescription();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      										if (current==null) {
            	      											current = createModelElementForParent(grammarAccess.getDocRequirementRule());
            	      										}
            	      										set(
            	      											current,
            	      											"description",
            	      											lv_description_13_0,
            	      											"org.osate.alisa.common.Common.Description");
            	      										afterParserOrEnumRuleCall();
            	      									
            	    }

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 3 :
            	    // InternalReqSpec.g:4213:4: ({...}? => ( ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+ ) )
            	    {
            	    // InternalReqSpec.g:4213:4: ({...}? => ( ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+ ) )
            	    // InternalReqSpec.g:4214:5: {...}? => ( ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+ )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 2) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocRequirement", "getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 2)");
            	    }
            	    // InternalReqSpec.g:4214:111: ( ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+ )
            	    // InternalReqSpec.g:4215:6: ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 2);
            	    // InternalReqSpec.g:4218:9: ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+
            	    int cnt104=0;
            	    loop104:
            	    do {
            	        int alt104=2;
            	        int LA104_0 = input.LA(1);

            	        if ( (LA104_0==60) ) {
            	            int LA104_2 = input.LA(2);

            	            if ( ((true)) ) {
            	                alt104=1;
            	            }


            	        }


            	        switch (alt104) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:4218:10: {...}? => ( (lv_constants_14_0= ruleValDeclaration ) )
            	    	    {
            	    	    if ( !((true)) ) {
            	    	        if (state.backtracking>0) {state.failed=true; return current;}
            	    	        throw new FailedPredicateException(input, "ruleDocRequirement", "true");
            	    	    }
            	    	    // InternalReqSpec.g:4218:19: ( (lv_constants_14_0= ruleValDeclaration ) )
            	    	    // InternalReqSpec.g:4218:20: (lv_constants_14_0= ruleValDeclaration )
            	    	    {
            	    	    // InternalReqSpec.g:4218:20: (lv_constants_14_0= ruleValDeclaration )
            	    	    // InternalReqSpec.g:4219:10: lv_constants_14_0= ruleValDeclaration
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      										newCompositeNode(grammarAccess.getDocRequirementAccess().getConstantsValDeclarationParserRuleCall_5_2_0());
            	    	      									
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_41);
            	    	    lv_constants_14_0=ruleValDeclaration();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      										if (current==null) {
            	    	      											current = createModelElementForParent(grammarAccess.getDocRequirementRule());
            	    	      										}
            	    	      										add(
            	    	      											current,
            	    	      											"constants",
            	    	      											lv_constants_14_0,
            	    	      											"org.osate.reqspec.ReqSpec.ValDeclaration");
            	    	      										afterParserOrEnumRuleCall();
            	    	      									
            	    	    }

            	    	    }


            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt104 >= 1 ) break loop104;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(104, input);
            	                throw eee;
            	        }
            	        cnt104++;
            	    } while (true);

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 4 :
            	    // InternalReqSpec.g:4241:4: ({...}? => ( ({...}? => ( (lv_computes_15_0= ruleComputeDeclaration ) ) )+ ) )
            	    {
            	    // InternalReqSpec.g:4241:4: ({...}? => ( ({...}? => ( (lv_computes_15_0= ruleComputeDeclaration ) ) )+ ) )
            	    // InternalReqSpec.g:4242:5: {...}? => ( ({...}? => ( (lv_computes_15_0= ruleComputeDeclaration ) ) )+ )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 3) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocRequirement", "getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 3)");
            	    }
            	    // InternalReqSpec.g:4242:111: ( ({...}? => ( (lv_computes_15_0= ruleComputeDeclaration ) ) )+ )
            	    // InternalReqSpec.g:4243:6: ({...}? => ( (lv_computes_15_0= ruleComputeDeclaration ) ) )+
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 3);
            	    // InternalReqSpec.g:4246:9: ({...}? => ( (lv_computes_15_0= ruleComputeDeclaration ) ) )+
            	    int cnt105=0;
            	    loop105:
            	    do {
            	        int alt105=2;
            	        int LA105_0 = input.LA(1);

            	        if ( (LA105_0==80) ) {
            	            int LA105_2 = input.LA(2);

            	            if ( ((true)) ) {
            	                alt105=1;
            	            }


            	        }


            	        switch (alt105) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:4246:10: {...}? => ( (lv_computes_15_0= ruleComputeDeclaration ) )
            	    	    {
            	    	    if ( !((true)) ) {
            	    	        if (state.backtracking>0) {state.failed=true; return current;}
            	    	        throw new FailedPredicateException(input, "ruleDocRequirement", "true");
            	    	    }
            	    	    // InternalReqSpec.g:4246:19: ( (lv_computes_15_0= ruleComputeDeclaration ) )
            	    	    // InternalReqSpec.g:4246:20: (lv_computes_15_0= ruleComputeDeclaration )
            	    	    {
            	    	    // InternalReqSpec.g:4246:20: (lv_computes_15_0= ruleComputeDeclaration )
            	    	    // InternalReqSpec.g:4247:10: lv_computes_15_0= ruleComputeDeclaration
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      										newCompositeNode(grammarAccess.getDocRequirementAccess().getComputesComputeDeclarationParserRuleCall_5_3_0());
            	    	      									
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_41);
            	    	    lv_computes_15_0=ruleComputeDeclaration();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      										if (current==null) {
            	    	      											current = createModelElementForParent(grammarAccess.getDocRequirementRule());
            	    	      										}
            	    	      										add(
            	    	      											current,
            	    	      											"computes",
            	    	      											lv_computes_15_0,
            	    	      											"org.osate.alisa.common.Common.ComputeDeclaration");
            	    	      										afterParserOrEnumRuleCall();
            	    	      									
            	    	    }

            	    	    }


            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt105 >= 1 ) break loop105;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(105, input);
            	                throw eee;
            	        }
            	        cnt105++;
            	    } while (true);

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 5 :
            	    // InternalReqSpec.g:4269:4: ({...}? => ( ({...}? => ( (lv_whencondition_16_0= ruleWhenCondition ) ) ) ) )
            	    {
            	    // InternalReqSpec.g:4269:4: ({...}? => ( ({...}? => ( (lv_whencondition_16_0= ruleWhenCondition ) ) ) ) )
            	    // InternalReqSpec.g:4270:5: {...}? => ( ({...}? => ( (lv_whencondition_16_0= ruleWhenCondition ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 4) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocRequirement", "getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 4)");
            	    }
            	    // InternalReqSpec.g:4270:111: ( ({...}? => ( (lv_whencondition_16_0= ruleWhenCondition ) ) ) )
            	    // InternalReqSpec.g:4271:6: ({...}? => ( (lv_whencondition_16_0= ruleWhenCondition ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 4);
            	    // InternalReqSpec.g:4274:9: ({...}? => ( (lv_whencondition_16_0= ruleWhenCondition ) ) )
            	    // InternalReqSpec.g:4274:10: {...}? => ( (lv_whencondition_16_0= ruleWhenCondition ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocRequirement", "true");
            	    }
            	    // InternalReqSpec.g:4274:19: ( (lv_whencondition_16_0= ruleWhenCondition ) )
            	    // InternalReqSpec.g:4274:20: (lv_whencondition_16_0= ruleWhenCondition )
            	    {
            	    // InternalReqSpec.g:4274:20: (lv_whencondition_16_0= ruleWhenCondition )
            	    // InternalReqSpec.g:4275:10: lv_whencondition_16_0= ruleWhenCondition
            	    {
            	    if ( state.backtracking==0 ) {

            	      										newCompositeNode(grammarAccess.getDocRequirementAccess().getWhenconditionWhenConditionParserRuleCall_5_4_0());
            	      									
            	    }
            	    pushFollow(FollowSets000.FOLLOW_41);
            	    lv_whencondition_16_0=ruleWhenCondition();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      										if (current==null) {
            	      											current = createModelElementForParent(grammarAccess.getDocRequirementRule());
            	      										}
            	      										set(
            	      											current,
            	      											"whencondition",
            	      											lv_whencondition_16_0,
            	      											"org.osate.reqspec.ReqSpec.WhenCondition");
            	      										afterParserOrEnumRuleCall();
            	      									
            	    }

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 6 :
            	    // InternalReqSpec.g:4297:4: ({...}? => ( ({...}? => ( (lv_predicate_17_0= ruleReqPredicate ) ) ) ) )
            	    {
            	    // InternalReqSpec.g:4297:4: ({...}? => ( ({...}? => ( (lv_predicate_17_0= ruleReqPredicate ) ) ) ) )
            	    // InternalReqSpec.g:4298:5: {...}? => ( ({...}? => ( (lv_predicate_17_0= ruleReqPredicate ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 5) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocRequirement", "getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 5)");
            	    }
            	    // InternalReqSpec.g:4298:111: ( ({...}? => ( (lv_predicate_17_0= ruleReqPredicate ) ) ) )
            	    // InternalReqSpec.g:4299:6: ({...}? => ( (lv_predicate_17_0= ruleReqPredicate ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 5);
            	    // InternalReqSpec.g:4302:9: ({...}? => ( (lv_predicate_17_0= ruleReqPredicate ) ) )
            	    // InternalReqSpec.g:4302:10: {...}? => ( (lv_predicate_17_0= ruleReqPredicate ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocRequirement", "true");
            	    }
            	    // InternalReqSpec.g:4302:19: ( (lv_predicate_17_0= ruleReqPredicate ) )
            	    // InternalReqSpec.g:4302:20: (lv_predicate_17_0= ruleReqPredicate )
            	    {
            	    // InternalReqSpec.g:4302:20: (lv_predicate_17_0= ruleReqPredicate )
            	    // InternalReqSpec.g:4303:10: lv_predicate_17_0= ruleReqPredicate
            	    {
            	    if ( state.backtracking==0 ) {

            	      										newCompositeNode(grammarAccess.getDocRequirementAccess().getPredicateReqPredicateParserRuleCall_5_5_0());
            	      									
            	    }
            	    pushFollow(FollowSets000.FOLLOW_41);
            	    lv_predicate_17_0=ruleReqPredicate();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      										if (current==null) {
            	      											current = createModelElementForParent(grammarAccess.getDocRequirementRule());
            	      										}
            	      										set(
            	      											current,
            	      											"predicate",
            	      											lv_predicate_17_0,
            	      											"org.osate.reqspec.ReqSpec.ReqPredicate");
            	      										afterParserOrEnumRuleCall();
            	      									
            	    }

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 7 :
            	    // InternalReqSpec.g:4325:4: ({...}? => ( ({...}? => ( (lv_rationale_18_0= ruleRationale ) ) ) ) )
            	    {
            	    // InternalReqSpec.g:4325:4: ({...}? => ( ({...}? => ( (lv_rationale_18_0= ruleRationale ) ) ) ) )
            	    // InternalReqSpec.g:4326:5: {...}? => ( ({...}? => ( (lv_rationale_18_0= ruleRationale ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 6) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocRequirement", "getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 6)");
            	    }
            	    // InternalReqSpec.g:4326:111: ( ({...}? => ( (lv_rationale_18_0= ruleRationale ) ) ) )
            	    // InternalReqSpec.g:4327:6: ({...}? => ( (lv_rationale_18_0= ruleRationale ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 6);
            	    // InternalReqSpec.g:4330:9: ({...}? => ( (lv_rationale_18_0= ruleRationale ) ) )
            	    // InternalReqSpec.g:4330:10: {...}? => ( (lv_rationale_18_0= ruleRationale ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocRequirement", "true");
            	    }
            	    // InternalReqSpec.g:4330:19: ( (lv_rationale_18_0= ruleRationale ) )
            	    // InternalReqSpec.g:4330:20: (lv_rationale_18_0= ruleRationale )
            	    {
            	    // InternalReqSpec.g:4330:20: (lv_rationale_18_0= ruleRationale )
            	    // InternalReqSpec.g:4331:10: lv_rationale_18_0= ruleRationale
            	    {
            	    if ( state.backtracking==0 ) {

            	      										newCompositeNode(grammarAccess.getDocRequirementAccess().getRationaleRationaleParserRuleCall_5_6_0());
            	      									
            	    }
            	    pushFollow(FollowSets000.FOLLOW_41);
            	    lv_rationale_18_0=ruleRationale();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      										if (current==null) {
            	      											current = createModelElementForParent(grammarAccess.getDocRequirementRule());
            	      										}
            	      										set(
            	      											current,
            	      											"rationale",
            	      											lv_rationale_18_0,
            	      											"org.osate.alisa.common.Common.Rationale");
            	      										afterParserOrEnumRuleCall();
            	      									
            	    }

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 8 :
            	    // InternalReqSpec.g:4353:4: ({...}? => ( ({...}? => ( (lv_changeUncertainty_19_0= ruleUncertainty ) ) ) ) )
            	    {
            	    // InternalReqSpec.g:4353:4: ({...}? => ( ({...}? => ( (lv_changeUncertainty_19_0= ruleUncertainty ) ) ) ) )
            	    // InternalReqSpec.g:4354:5: {...}? => ( ({...}? => ( (lv_changeUncertainty_19_0= ruleUncertainty ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 7) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocRequirement", "getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 7)");
            	    }
            	    // InternalReqSpec.g:4354:111: ( ({...}? => ( (lv_changeUncertainty_19_0= ruleUncertainty ) ) ) )
            	    // InternalReqSpec.g:4355:6: ({...}? => ( (lv_changeUncertainty_19_0= ruleUncertainty ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 7);
            	    // InternalReqSpec.g:4358:9: ({...}? => ( (lv_changeUncertainty_19_0= ruleUncertainty ) ) )
            	    // InternalReqSpec.g:4358:10: {...}? => ( (lv_changeUncertainty_19_0= ruleUncertainty ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocRequirement", "true");
            	    }
            	    // InternalReqSpec.g:4358:19: ( (lv_changeUncertainty_19_0= ruleUncertainty ) )
            	    // InternalReqSpec.g:4358:20: (lv_changeUncertainty_19_0= ruleUncertainty )
            	    {
            	    // InternalReqSpec.g:4358:20: (lv_changeUncertainty_19_0= ruleUncertainty )
            	    // InternalReqSpec.g:4359:10: lv_changeUncertainty_19_0= ruleUncertainty
            	    {
            	    if ( state.backtracking==0 ) {

            	      										newCompositeNode(grammarAccess.getDocRequirementAccess().getChangeUncertaintyUncertaintyParserRuleCall_5_7_0());
            	      									
            	    }
            	    pushFollow(FollowSets000.FOLLOW_41);
            	    lv_changeUncertainty_19_0=ruleUncertainty();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      										if (current==null) {
            	      											current = createModelElementForParent(grammarAccess.getDocRequirementRule());
            	      										}
            	      										set(
            	      											current,
            	      											"changeUncertainty",
            	      											lv_changeUncertainty_19_0,
            	      											"org.osate.alisa.common.Common.Uncertainty");
            	      										afterParserOrEnumRuleCall();
            	      									
            	    }

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 9 :
            	    // InternalReqSpec.g:4381:4: ({...}? => ( ({...}? => (otherlv_20= 'mitigates' ( ( (otherlv_21= RULE_ID ) ) | ( (lv_exceptionText_22_0= RULE_STRING ) ) ) ) ) ) )
            	    {
            	    // InternalReqSpec.g:4381:4: ({...}? => ( ({...}? => (otherlv_20= 'mitigates' ( ( (otherlv_21= RULE_ID ) ) | ( (lv_exceptionText_22_0= RULE_STRING ) ) ) ) ) ) )
            	    // InternalReqSpec.g:4382:5: {...}? => ( ({...}? => (otherlv_20= 'mitigates' ( ( (otherlv_21= RULE_ID ) ) | ( (lv_exceptionText_22_0= RULE_STRING ) ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 8) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocRequirement", "getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 8)");
            	    }
            	    // InternalReqSpec.g:4382:111: ( ({...}? => (otherlv_20= 'mitigates' ( ( (otherlv_21= RULE_ID ) ) | ( (lv_exceptionText_22_0= RULE_STRING ) ) ) ) ) )
            	    // InternalReqSpec.g:4383:6: ({...}? => (otherlv_20= 'mitigates' ( ( (otherlv_21= RULE_ID ) ) | ( (lv_exceptionText_22_0= RULE_STRING ) ) ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 8);
            	    // InternalReqSpec.g:4386:9: ({...}? => (otherlv_20= 'mitigates' ( ( (otherlv_21= RULE_ID ) ) | ( (lv_exceptionText_22_0= RULE_STRING ) ) ) ) )
            	    // InternalReqSpec.g:4386:10: {...}? => (otherlv_20= 'mitigates' ( ( (otherlv_21= RULE_ID ) ) | ( (lv_exceptionText_22_0= RULE_STRING ) ) ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocRequirement", "true");
            	    }
            	    // InternalReqSpec.g:4386:19: (otherlv_20= 'mitigates' ( ( (otherlv_21= RULE_ID ) ) | ( (lv_exceptionText_22_0= RULE_STRING ) ) ) )
            	    // InternalReqSpec.g:4386:20: otherlv_20= 'mitigates' ( ( (otherlv_21= RULE_ID ) ) | ( (lv_exceptionText_22_0= RULE_STRING ) ) )
            	    {
            	    otherlv_20=(Token)match(input,40,FollowSets000.FOLLOW_24); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_20, grammarAccess.getDocRequirementAccess().getMitigatesKeyword_5_8_0());
            	      								
            	    }
            	    // InternalReqSpec.g:4390:9: ( ( (otherlv_21= RULE_ID ) ) | ( (lv_exceptionText_22_0= RULE_STRING ) ) )
            	    int alt106=2;
            	    int LA106_0 = input.LA(1);

            	    if ( (LA106_0==RULE_ID) ) {
            	        alt106=1;
            	    }
            	    else if ( (LA106_0==RULE_STRING) ) {
            	        alt106=2;
            	    }
            	    else {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 106, 0, input);

            	        throw nvae;
            	    }
            	    switch (alt106) {
            	        case 1 :
            	            // InternalReqSpec.g:4391:10: ( (otherlv_21= RULE_ID ) )
            	            {
            	            // InternalReqSpec.g:4391:10: ( (otherlv_21= RULE_ID ) )
            	            // InternalReqSpec.g:4392:11: (otherlv_21= RULE_ID )
            	            {
            	            // InternalReqSpec.g:4392:11: (otherlv_21= RULE_ID )
            	            // InternalReqSpec.g:4393:12: otherlv_21= RULE_ID
            	            {
            	            if ( state.backtracking==0 ) {

            	              												if (current==null) {
            	              													current = createModelElement(grammarAccess.getDocRequirementRule());
            	              												}
            	              											
            	            }
            	            otherlv_21=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_41); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              												newLeafNode(otherlv_21, grammarAccess.getDocRequirementAccess().getExceptionEObjectCrossReference_5_8_1_0_0());
            	              											
            	            }

            	            }


            	            }


            	            }
            	            break;
            	        case 2 :
            	            // InternalReqSpec.g:4405:10: ( (lv_exceptionText_22_0= RULE_STRING ) )
            	            {
            	            // InternalReqSpec.g:4405:10: ( (lv_exceptionText_22_0= RULE_STRING ) )
            	            // InternalReqSpec.g:4406:11: (lv_exceptionText_22_0= RULE_STRING )
            	            {
            	            // InternalReqSpec.g:4406:11: (lv_exceptionText_22_0= RULE_STRING )
            	            // InternalReqSpec.g:4407:12: lv_exceptionText_22_0= RULE_STRING
            	            {
            	            lv_exceptionText_22_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_41); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              												newLeafNode(lv_exceptionText_22_0, grammarAccess.getDocRequirementAccess().getExceptionTextSTRINGTerminalRuleCall_5_8_1_1_0());
            	              											
            	            }
            	            if ( state.backtracking==0 ) {

            	              												if (current==null) {
            	              													current = createModelElement(grammarAccess.getDocRequirementRule());
            	              												}
            	              												setWithLastConsumed(
            	              													current,
            	              													"exceptionText",
            	              													lv_exceptionText_22_0,
            	              													"org.eclipse.xtext.common.Terminals.STRING");
            	              											
            	            }

            	            }


            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 10 :
            	    // InternalReqSpec.g:4430:4: ({...}? => ( ({...}? => (otherlv_23= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    {
            	    // InternalReqSpec.g:4430:4: ({...}? => ( ({...}? => (otherlv_23= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    // InternalReqSpec.g:4431:5: {...}? => ( ({...}? => (otherlv_23= 'refines' ( ( ruleQualifiedName ) )+ ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 9) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocRequirement", "getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 9)");
            	    }
            	    // InternalReqSpec.g:4431:111: ( ({...}? => (otherlv_23= 'refines' ( ( ruleQualifiedName ) )+ ) ) )
            	    // InternalReqSpec.g:4432:6: ({...}? => (otherlv_23= 'refines' ( ( ruleQualifiedName ) )+ ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 9);
            	    // InternalReqSpec.g:4435:9: ({...}? => (otherlv_23= 'refines' ( ( ruleQualifiedName ) )+ ) )
            	    // InternalReqSpec.g:4435:10: {...}? => (otherlv_23= 'refines' ( ( ruleQualifiedName ) )+ )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocRequirement", "true");
            	    }
            	    // InternalReqSpec.g:4435:19: (otherlv_23= 'refines' ( ( ruleQualifiedName ) )+ )
            	    // InternalReqSpec.g:4435:20: otherlv_23= 'refines' ( ( ruleQualifiedName ) )+
            	    {
            	    otherlv_23=(Token)match(input,34,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_23, grammarAccess.getDocRequirementAccess().getRefinesKeyword_5_9_0());
            	      								
            	    }
            	    // InternalReqSpec.g:4439:9: ( ( ruleQualifiedName ) )+
            	    int cnt107=0;
            	    loop107:
            	    do {
            	        int alt107=2;
            	        int LA107_0 = input.LA(1);

            	        if ( (LA107_0==RULE_ID) ) {
            	            alt107=1;
            	        }


            	        switch (alt107) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:4440:10: ( ruleQualifiedName )
            	    	    {
            	    	    // InternalReqSpec.g:4440:10: ( ruleQualifiedName )
            	    	    // InternalReqSpec.g:4441:11: ruleQualifiedName
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      											if (current==null) {
            	    	      												current = createModelElement(grammarAccess.getDocRequirementRule());
            	    	      											}
            	    	      										
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      											newCompositeNode(grammarAccess.getDocRequirementAccess().getRefinesReferenceRequirementCrossReference_5_9_1_0());
            	    	      										
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_42);
            	    	    ruleQualifiedName();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      											afterParserOrEnumRuleCall();
            	    	      										
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt107 >= 1 ) break loop107;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(107, input);
            	                throw eee;
            	        }
            	        cnt107++;
            	    } while (true);


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 11 :
            	    // InternalReqSpec.g:4461:4: ({...}? => ( ({...}? => (otherlv_25= 'decomposes' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    {
            	    // InternalReqSpec.g:4461:4: ({...}? => ( ({...}? => (otherlv_25= 'decomposes' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    // InternalReqSpec.g:4462:5: {...}? => ( ({...}? => (otherlv_25= 'decomposes' ( ( ruleQualifiedName ) )+ ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 10) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocRequirement", "getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 10)");
            	    }
            	    // InternalReqSpec.g:4462:112: ( ({...}? => (otherlv_25= 'decomposes' ( ( ruleQualifiedName ) )+ ) ) )
            	    // InternalReqSpec.g:4463:6: ({...}? => (otherlv_25= 'decomposes' ( ( ruleQualifiedName ) )+ ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 10);
            	    // InternalReqSpec.g:4466:9: ({...}? => (otherlv_25= 'decomposes' ( ( ruleQualifiedName ) )+ ) )
            	    // InternalReqSpec.g:4466:10: {...}? => (otherlv_25= 'decomposes' ( ( ruleQualifiedName ) )+ )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocRequirement", "true");
            	    }
            	    // InternalReqSpec.g:4466:19: (otherlv_25= 'decomposes' ( ( ruleQualifiedName ) )+ )
            	    // InternalReqSpec.g:4466:20: otherlv_25= 'decomposes' ( ( ruleQualifiedName ) )+
            	    {
            	    otherlv_25=(Token)match(input,42,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_25, grammarAccess.getDocRequirementAccess().getDecomposesKeyword_5_10_0());
            	      								
            	    }
            	    // InternalReqSpec.g:4470:9: ( ( ruleQualifiedName ) )+
            	    int cnt108=0;
            	    loop108:
            	    do {
            	        int alt108=2;
            	        int LA108_0 = input.LA(1);

            	        if ( (LA108_0==RULE_ID) ) {
            	            alt108=1;
            	        }


            	        switch (alt108) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:4471:10: ( ruleQualifiedName )
            	    	    {
            	    	    // InternalReqSpec.g:4471:10: ( ruleQualifiedName )
            	    	    // InternalReqSpec.g:4472:11: ruleQualifiedName
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      											if (current==null) {
            	    	      												current = createModelElement(grammarAccess.getDocRequirementRule());
            	    	      											}
            	    	      										
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      											newCompositeNode(grammarAccess.getDocRequirementAccess().getDecomposesReferenceRequirementCrossReference_5_10_1_0());
            	    	      										
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_42);
            	    	    ruleQualifiedName();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      											afterParserOrEnumRuleCall();
            	    	      										
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt108 >= 1 ) break loop108;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(108, input);
            	                throw eee;
            	        }
            	        cnt108++;
            	    } while (true);


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 12 :
            	    // InternalReqSpec.g:4492:4: ({...}? => ( ({...}? => (otherlv_27= 'inherits' ( ( ruleQualifiedName ) ) ) ) ) )
            	    {
            	    // InternalReqSpec.g:4492:4: ({...}? => ( ({...}? => (otherlv_27= 'inherits' ( ( ruleQualifiedName ) ) ) ) ) )
            	    // InternalReqSpec.g:4493:5: {...}? => ( ({...}? => (otherlv_27= 'inherits' ( ( ruleQualifiedName ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 11) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocRequirement", "getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 11)");
            	    }
            	    // InternalReqSpec.g:4493:112: ( ({...}? => (otherlv_27= 'inherits' ( ( ruleQualifiedName ) ) ) ) )
            	    // InternalReqSpec.g:4494:6: ({...}? => (otherlv_27= 'inherits' ( ( ruleQualifiedName ) ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 11);
            	    // InternalReqSpec.g:4497:9: ({...}? => (otherlv_27= 'inherits' ( ( ruleQualifiedName ) ) ) )
            	    // InternalReqSpec.g:4497:10: {...}? => (otherlv_27= 'inherits' ( ( ruleQualifiedName ) ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocRequirement", "true");
            	    }
            	    // InternalReqSpec.g:4497:19: (otherlv_27= 'inherits' ( ( ruleQualifiedName ) ) )
            	    // InternalReqSpec.g:4497:20: otherlv_27= 'inherits' ( ( ruleQualifiedName ) )
            	    {
            	    otherlv_27=(Token)match(input,41,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_27, grammarAccess.getDocRequirementAccess().getInheritsKeyword_5_11_0());
            	      								
            	    }
            	    // InternalReqSpec.g:4501:9: ( ( ruleQualifiedName ) )
            	    // InternalReqSpec.g:4502:10: ( ruleQualifiedName )
            	    {
            	    // InternalReqSpec.g:4502:10: ( ruleQualifiedName )
            	    // InternalReqSpec.g:4503:11: ruleQualifiedName
            	    {
            	    if ( state.backtracking==0 ) {

            	      											if (current==null) {
            	      												current = createModelElement(grammarAccess.getDocRequirementRule());
            	      											}
            	      										
            	    }
            	    if ( state.backtracking==0 ) {

            	      											newCompositeNode(grammarAccess.getDocRequirementAccess().getInheritsReferenceRequirementCrossReference_5_11_1_0());
            	      										
            	    }
            	    pushFollow(FollowSets000.FOLLOW_41);
            	    ruleQualifiedName();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      											afterParserOrEnumRuleCall();
            	      										
            	    }

            	    }


            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 13 :
            	    // InternalReqSpec.g:4523:4: ({...}? => ( ({...}? => (otherlv_29= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    {
            	    // InternalReqSpec.g:4523:4: ({...}? => ( ({...}? => (otherlv_29= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    // InternalReqSpec.g:4524:5: {...}? => ( ({...}? => (otherlv_29= 'evolves' ( ( ruleQualifiedName ) )+ ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 12) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocRequirement", "getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 12)");
            	    }
            	    // InternalReqSpec.g:4524:112: ( ({...}? => (otherlv_29= 'evolves' ( ( ruleQualifiedName ) )+ ) ) )
            	    // InternalReqSpec.g:4525:6: ({...}? => (otherlv_29= 'evolves' ( ( ruleQualifiedName ) )+ ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 12);
            	    // InternalReqSpec.g:4528:9: ({...}? => (otherlv_29= 'evolves' ( ( ruleQualifiedName ) )+ ) )
            	    // InternalReqSpec.g:4528:10: {...}? => (otherlv_29= 'evolves' ( ( ruleQualifiedName ) )+ )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocRequirement", "true");
            	    }
            	    // InternalReqSpec.g:4528:19: (otherlv_29= 'evolves' ( ( ruleQualifiedName ) )+ )
            	    // InternalReqSpec.g:4528:20: otherlv_29= 'evolves' ( ( ruleQualifiedName ) )+
            	    {
            	    otherlv_29=(Token)match(input,37,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_29, grammarAccess.getDocRequirementAccess().getEvolvesKeyword_5_12_0());
            	      								
            	    }
            	    // InternalReqSpec.g:4532:9: ( ( ruleQualifiedName ) )+
            	    int cnt109=0;
            	    loop109:
            	    do {
            	        int alt109=2;
            	        int LA109_0 = input.LA(1);

            	        if ( (LA109_0==RULE_ID) ) {
            	            alt109=1;
            	        }


            	        switch (alt109) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:4533:10: ( ruleQualifiedName )
            	    	    {
            	    	    // InternalReqSpec.g:4533:10: ( ruleQualifiedName )
            	    	    // InternalReqSpec.g:4534:11: ruleQualifiedName
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      											if (current==null) {
            	    	      												current = createModelElement(grammarAccess.getDocRequirementRule());
            	    	      											}
            	    	      										
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      											newCompositeNode(grammarAccess.getDocRequirementAccess().getEvolvesReferenceRequirementCrossReference_5_12_1_0());
            	    	      										
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_42);
            	    	    ruleQualifiedName();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      											afterParserOrEnumRuleCall();
            	    	      										
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt109 >= 1 ) break loop109;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(109, input);
            	                throw eee;
            	        }
            	        cnt109++;
            	    } while (true);


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 14 :
            	    // InternalReqSpec.g:4554:4: ({...}? => ( ({...}? => ( ( (lv_dropped_31_0= 'dropped' ) ) ( (lv_dropRationale_32_0= RULE_STRING ) )? ) ) ) )
            	    {
            	    // InternalReqSpec.g:4554:4: ({...}? => ( ({...}? => ( ( (lv_dropped_31_0= 'dropped' ) ) ( (lv_dropRationale_32_0= RULE_STRING ) )? ) ) ) )
            	    // InternalReqSpec.g:4555:5: {...}? => ( ({...}? => ( ( (lv_dropped_31_0= 'dropped' ) ) ( (lv_dropRationale_32_0= RULE_STRING ) )? ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 13) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocRequirement", "getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 13)");
            	    }
            	    // InternalReqSpec.g:4555:112: ( ({...}? => ( ( (lv_dropped_31_0= 'dropped' ) ) ( (lv_dropRationale_32_0= RULE_STRING ) )? ) ) )
            	    // InternalReqSpec.g:4556:6: ({...}? => ( ( (lv_dropped_31_0= 'dropped' ) ) ( (lv_dropRationale_32_0= RULE_STRING ) )? ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 13);
            	    // InternalReqSpec.g:4559:9: ({...}? => ( ( (lv_dropped_31_0= 'dropped' ) ) ( (lv_dropRationale_32_0= RULE_STRING ) )? ) )
            	    // InternalReqSpec.g:4559:10: {...}? => ( ( (lv_dropped_31_0= 'dropped' ) ) ( (lv_dropRationale_32_0= RULE_STRING ) )? )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocRequirement", "true");
            	    }
            	    // InternalReqSpec.g:4559:19: ( ( (lv_dropped_31_0= 'dropped' ) ) ( (lv_dropRationale_32_0= RULE_STRING ) )? )
            	    // InternalReqSpec.g:4559:20: ( (lv_dropped_31_0= 'dropped' ) ) ( (lv_dropRationale_32_0= RULE_STRING ) )?
            	    {
            	    // InternalReqSpec.g:4559:20: ( (lv_dropped_31_0= 'dropped' ) )
            	    // InternalReqSpec.g:4560:10: (lv_dropped_31_0= 'dropped' )
            	    {
            	    // InternalReqSpec.g:4560:10: (lv_dropped_31_0= 'dropped' )
            	    // InternalReqSpec.g:4561:11: lv_dropped_31_0= 'dropped'
            	    {
            	    lv_dropped_31_0=(Token)match(input,38,FollowSets000.FOLLOW_43); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      											newLeafNode(lv_dropped_31_0, grammarAccess.getDocRequirementAccess().getDroppedDroppedKeyword_5_13_0_0());
            	      										
            	    }
            	    if ( state.backtracking==0 ) {

            	      											if (current==null) {
            	      												current = createModelElement(grammarAccess.getDocRequirementRule());
            	      											}
            	      											setWithLastConsumed(current, "dropped", true, "dropped");
            	      										
            	    }

            	    }


            	    }

            	    // InternalReqSpec.g:4573:9: ( (lv_dropRationale_32_0= RULE_STRING ) )?
            	    int alt110=2;
            	    int LA110_0 = input.LA(1);

            	    if ( (LA110_0==RULE_STRING) ) {
            	        alt110=1;
            	    }
            	    switch (alt110) {
            	        case 1 :
            	            // InternalReqSpec.g:4574:10: (lv_dropRationale_32_0= RULE_STRING )
            	            {
            	            // InternalReqSpec.g:4574:10: (lv_dropRationale_32_0= RULE_STRING )
            	            // InternalReqSpec.g:4575:11: lv_dropRationale_32_0= RULE_STRING
            	            {
            	            lv_dropRationale_32_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_41); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              											newLeafNode(lv_dropRationale_32_0, grammarAccess.getDocRequirementAccess().getDropRationaleSTRINGTerminalRuleCall_5_13_1_0());
            	              										
            	            }
            	            if ( state.backtracking==0 ) {

            	              											if (current==null) {
            	              												current = createModelElement(grammarAccess.getDocRequirementRule());
            	              											}
            	              											setWithLastConsumed(
            	              												current,
            	              												"dropRationale",
            	              												lv_dropRationale_32_0,
            	              												"org.eclipse.xtext.common.Terminals.STRING");
            	              										
            	            }

            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 15 :
            	    // InternalReqSpec.g:4597:4: ({...}? => ( ({...}? => (otherlv_33= 'development' otherlv_34= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    {
            	    // InternalReqSpec.g:4597:4: ({...}? => ( ({...}? => (otherlv_33= 'development' otherlv_34= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    // InternalReqSpec.g:4598:5: {...}? => ( ({...}? => (otherlv_33= 'development' otherlv_34= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 14) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocRequirement", "getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 14)");
            	    }
            	    // InternalReqSpec.g:4598:112: ( ({...}? => (otherlv_33= 'development' otherlv_34= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) )
            	    // InternalReqSpec.g:4599:6: ({...}? => (otherlv_33= 'development' otherlv_34= 'stakeholder' ( ( ruleQualifiedName ) )+ ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 14);
            	    // InternalReqSpec.g:4602:9: ({...}? => (otherlv_33= 'development' otherlv_34= 'stakeholder' ( ( ruleQualifiedName ) )+ ) )
            	    // InternalReqSpec.g:4602:10: {...}? => (otherlv_33= 'development' otherlv_34= 'stakeholder' ( ( ruleQualifiedName ) )+ )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocRequirement", "true");
            	    }
            	    // InternalReqSpec.g:4602:19: (otherlv_33= 'development' otherlv_34= 'stakeholder' ( ( ruleQualifiedName ) )+ )
            	    // InternalReqSpec.g:4602:20: otherlv_33= 'development' otherlv_34= 'stakeholder' ( ( ruleQualifiedName ) )+
            	    {
            	    otherlv_33=(Token)match(input,43,FollowSets000.FOLLOW_44); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_33, grammarAccess.getDocRequirementAccess().getDevelopmentKeyword_5_14_0());
            	      								
            	    }
            	    otherlv_34=(Token)match(input,20,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_34, grammarAccess.getDocRequirementAccess().getStakeholderKeyword_5_14_1());
            	      								
            	    }
            	    // InternalReqSpec.g:4610:9: ( ( ruleQualifiedName ) )+
            	    int cnt111=0;
            	    loop111:
            	    do {
            	        int alt111=2;
            	        int LA111_0 = input.LA(1);

            	        if ( (LA111_0==RULE_ID) ) {
            	            alt111=1;
            	        }


            	        switch (alt111) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:4611:10: ( ruleQualifiedName )
            	    	    {
            	    	    // InternalReqSpec.g:4611:10: ( ruleQualifiedName )
            	    	    // InternalReqSpec.g:4612:11: ruleQualifiedName
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      											if (current==null) {
            	    	      												current = createModelElement(grammarAccess.getDocRequirementRule());
            	    	      											}
            	    	      										
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      											newCompositeNode(grammarAccess.getDocRequirementAccess().getDevelopmentStakeholderStakeholderCrossReference_5_14_2_0());
            	    	      										
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_42);
            	    	    ruleQualifiedName();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      											afterParserOrEnumRuleCall();
            	    	      										
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt111 >= 1 ) break loop111;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(111, input);
            	                throw eee;
            	        }
            	        cnt111++;
            	    } while (true);


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 16 :
            	    // InternalReqSpec.g:4632:4: ({...}? => ( ({...}? => (otherlv_36= 'see' otherlv_37= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    {
            	    // InternalReqSpec.g:4632:4: ({...}? => ( ({...}? => (otherlv_36= 'see' otherlv_37= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) )
            	    // InternalReqSpec.g:4633:5: {...}? => ( ({...}? => (otherlv_36= 'see' otherlv_37= 'goal' ( ( ruleQualifiedName ) )+ ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 15) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocRequirement", "getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 15)");
            	    }
            	    // InternalReqSpec.g:4633:112: ( ({...}? => (otherlv_36= 'see' otherlv_37= 'goal' ( ( ruleQualifiedName ) )+ ) ) )
            	    // InternalReqSpec.g:4634:6: ({...}? => (otherlv_36= 'see' otherlv_37= 'goal' ( ( ruleQualifiedName ) )+ ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 15);
            	    // InternalReqSpec.g:4637:9: ({...}? => (otherlv_36= 'see' otherlv_37= 'goal' ( ( ruleQualifiedName ) )+ ) )
            	    // InternalReqSpec.g:4637:10: {...}? => (otherlv_36= 'see' otherlv_37= 'goal' ( ( ruleQualifiedName ) )+ )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocRequirement", "true");
            	    }
            	    // InternalReqSpec.g:4637:19: (otherlv_36= 'see' otherlv_37= 'goal' ( ( ruleQualifiedName ) )+ )
            	    // InternalReqSpec.g:4637:20: otherlv_36= 'see' otherlv_37= 'goal' ( ( ruleQualifiedName ) )+
            	    {
            	    otherlv_36=(Token)match(input,25,FollowSets000.FOLLOW_40); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_36, grammarAccess.getDocRequirementAccess().getSeeKeyword_5_15_0());
            	      								
            	    }
            	    otherlv_37=(Token)match(input,32,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_37, grammarAccess.getDocRequirementAccess().getGoalKeyword_5_15_1());
            	      								
            	    }
            	    // InternalReqSpec.g:4645:9: ( ( ruleQualifiedName ) )+
            	    int cnt112=0;
            	    loop112:
            	    do {
            	        int alt112=2;
            	        int LA112_0 = input.LA(1);

            	        if ( (LA112_0==RULE_ID) ) {
            	            alt112=1;
            	        }


            	        switch (alt112) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:4646:10: ( ruleQualifiedName )
            	    	    {
            	    	    // InternalReqSpec.g:4646:10: ( ruleQualifiedName )
            	    	    // InternalReqSpec.g:4647:11: ruleQualifiedName
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      											if (current==null) {
            	    	      												current = createModelElement(grammarAccess.getDocRequirementRule());
            	    	      											}
            	    	      										
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      											newCompositeNode(grammarAccess.getDocRequirementAccess().getGoalReferenceGoalCrossReference_5_15_2_0());
            	    	      										
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_42);
            	    	    ruleQualifiedName();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      											afterParserOrEnumRuleCall();
            	    	      										
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt112 >= 1 ) break loop112;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(112, input);
            	                throw eee;
            	        }
            	        cnt112++;
            	    } while (true);


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 17 :
            	    // InternalReqSpec.g:4667:4: ({...}? => ( ({...}? => (otherlv_39= 'see' otherlv_40= 'document' ( (lv_docReference_41_0= ruleExternalDocument ) )+ ) ) ) )
            	    {
            	    // InternalReqSpec.g:4667:4: ({...}? => ( ({...}? => (otherlv_39= 'see' otherlv_40= 'document' ( (lv_docReference_41_0= ruleExternalDocument ) )+ ) ) ) )
            	    // InternalReqSpec.g:4668:5: {...}? => ( ({...}? => (otherlv_39= 'see' otherlv_40= 'document' ( (lv_docReference_41_0= ruleExternalDocument ) )+ ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 16) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocRequirement", "getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 16)");
            	    }
            	    // InternalReqSpec.g:4668:112: ( ({...}? => (otherlv_39= 'see' otherlv_40= 'document' ( (lv_docReference_41_0= ruleExternalDocument ) )+ ) ) )
            	    // InternalReqSpec.g:4669:6: ({...}? => (otherlv_39= 'see' otherlv_40= 'document' ( (lv_docReference_41_0= ruleExternalDocument ) )+ ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 16);
            	    // InternalReqSpec.g:4672:9: ({...}? => (otherlv_39= 'see' otherlv_40= 'document' ( (lv_docReference_41_0= ruleExternalDocument ) )+ ) )
            	    // InternalReqSpec.g:4672:10: {...}? => (otherlv_39= 'see' otherlv_40= 'document' ( (lv_docReference_41_0= ruleExternalDocument ) )+ )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocRequirement", "true");
            	    }
            	    // InternalReqSpec.g:4672:19: (otherlv_39= 'see' otherlv_40= 'document' ( (lv_docReference_41_0= ruleExternalDocument ) )+ )
            	    // InternalReqSpec.g:4672:20: otherlv_39= 'see' otherlv_40= 'document' ( (lv_docReference_41_0= ruleExternalDocument ) )+
            	    {
            	    otherlv_39=(Token)match(input,25,FollowSets000.FOLLOW_17); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_39, grammarAccess.getDocRequirementAccess().getSeeKeyword_5_16_0());
            	      								
            	    }
            	    otherlv_40=(Token)match(input,26,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_40, grammarAccess.getDocRequirementAccess().getDocumentKeyword_5_16_1());
            	      								
            	    }
            	    // InternalReqSpec.g:4680:9: ( (lv_docReference_41_0= ruleExternalDocument ) )+
            	    int cnt113=0;
            	    loop113:
            	    do {
            	        int alt113=2;
            	        int LA113_0 = input.LA(1);

            	        if ( (LA113_0==RULE_ID) ) {
            	            alt113=1;
            	        }


            	        switch (alt113) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:4681:10: (lv_docReference_41_0= ruleExternalDocument )
            	    	    {
            	    	    // InternalReqSpec.g:4681:10: (lv_docReference_41_0= ruleExternalDocument )
            	    	    // InternalReqSpec.g:4682:11: lv_docReference_41_0= ruleExternalDocument
            	    	    {
            	    	    if ( state.backtracking==0 ) {

            	    	      											newCompositeNode(grammarAccess.getDocRequirementAccess().getDocReferenceExternalDocumentParserRuleCall_5_16_2_0());
            	    	      										
            	    	    }
            	    	    pushFollow(FollowSets000.FOLLOW_42);
            	    	    lv_docReference_41_0=ruleExternalDocument();

            	    	    state._fsp--;
            	    	    if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      											if (current==null) {
            	    	      												current = createModelElementForParent(grammarAccess.getDocRequirementRule());
            	    	      											}
            	    	      											add(
            	    	      												current,
            	    	      												"docReference",
            	    	      												lv_docReference_41_0,
            	    	      												"org.osate.reqspec.ReqSpec.ExternalDocument");
            	    	      											afterParserOrEnumRuleCall();
            	    	      										
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt113 >= 1 ) break loop113;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(113, input);
            	                throw eee;
            	        }
            	        cnt113++;
            	    } while (true);


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;
            	case 18 :
            	    // InternalReqSpec.g:4705:4: ({...}? => ( ({...}? => (otherlv_42= 'issues' ( (lv_issues_43_0= RULE_STRING ) )+ ) ) ) )
            	    {
            	    // InternalReqSpec.g:4705:4: ({...}? => ( ({...}? => (otherlv_42= 'issues' ( (lv_issues_43_0= RULE_STRING ) )+ ) ) ) )
            	    // InternalReqSpec.g:4706:5: {...}? => ( ({...}? => (otherlv_42= 'issues' ( (lv_issues_43_0= RULE_STRING ) )+ ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 17) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocRequirement", "getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 17)");
            	    }
            	    // InternalReqSpec.g:4706:112: ( ({...}? => (otherlv_42= 'issues' ( (lv_issues_43_0= RULE_STRING ) )+ ) ) )
            	    // InternalReqSpec.g:4707:6: ({...}? => (otherlv_42= 'issues' ( (lv_issues_43_0= RULE_STRING ) )+ ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 17);
            	    // InternalReqSpec.g:4710:9: ({...}? => (otherlv_42= 'issues' ( (lv_issues_43_0= RULE_STRING ) )+ ) )
            	    // InternalReqSpec.g:4710:10: {...}? => (otherlv_42= 'issues' ( (lv_issues_43_0= RULE_STRING ) )+ )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleDocRequirement", "true");
            	    }
            	    // InternalReqSpec.g:4710:19: (otherlv_42= 'issues' ( (lv_issues_43_0= RULE_STRING ) )+ )
            	    // InternalReqSpec.g:4710:20: otherlv_42= 'issues' ( (lv_issues_43_0= RULE_STRING ) )+
            	    {
            	    otherlv_42=(Token)match(input,27,FollowSets000.FOLLOW_9); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_42, grammarAccess.getDocRequirementAccess().getIssuesKeyword_5_17_0());
            	      								
            	    }
            	    // InternalReqSpec.g:4714:9: ( (lv_issues_43_0= RULE_STRING ) )+
            	    int cnt114=0;
            	    loop114:
            	    do {
            	        int alt114=2;
            	        int LA114_0 = input.LA(1);

            	        if ( (LA114_0==RULE_STRING) ) {
            	            alt114=1;
            	        }


            	        switch (alt114) {
            	    	case 1 :
            	    	    // InternalReqSpec.g:4715:10: (lv_issues_43_0= RULE_STRING )
            	    	    {
            	    	    // InternalReqSpec.g:4715:10: (lv_issues_43_0= RULE_STRING )
            	    	    // InternalReqSpec.g:4716:11: lv_issues_43_0= RULE_STRING
            	    	    {
            	    	    lv_issues_43_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_43); if (state.failed) return current;
            	    	    if ( state.backtracking==0 ) {

            	    	      											newLeafNode(lv_issues_43_0, grammarAccess.getDocRequirementAccess().getIssuesSTRINGTerminalRuleCall_5_17_1_0());
            	    	      										
            	    	    }
            	    	    if ( state.backtracking==0 ) {

            	    	      											if (current==null) {
            	    	      												current = createModelElement(grammarAccess.getDocRequirementRule());
            	    	      											}
            	    	      											addWithLastConsumed(
            	    	      												current,
            	    	      												"issues",
            	    	      												lv_issues_43_0,
            	    	      												"org.eclipse.xtext.common.Terminals.STRING");
            	    	      										
            	    	    }

            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    if ( cnt114 >= 1 ) break loop114;
            	    	    if (state.backtracking>0) {state.failed=true; return current;}
            	                EarlyExitException eee =
            	                    new EarlyExitException(114, input);
            	                throw eee;
            	        }
            	        cnt114++;
            	    } while (true);


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5());

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop115;
                }
            } while (true);


            }


            }

            getUnorderedGroupHelper().leave(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5());

            }

            otherlv_44=(Token)match(input,19,FollowSets000.FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_44, grammarAccess.getDocRequirementAccess().getRightSquareBracketKeyword_6());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDocRequirement"


    // $ANTLR start "entryRuleIncludeGlobalRequirement"
    // InternalReqSpec.g:4753:1: entryRuleIncludeGlobalRequirement returns [EObject current=null] : iv_ruleIncludeGlobalRequirement= ruleIncludeGlobalRequirement EOF ;
    public final EObject entryRuleIncludeGlobalRequirement() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleIncludeGlobalRequirement = null;


        try {
            // InternalReqSpec.g:4753:65: (iv_ruleIncludeGlobalRequirement= ruleIncludeGlobalRequirement EOF )
            // InternalReqSpec.g:4754:2: iv_ruleIncludeGlobalRequirement= ruleIncludeGlobalRequirement EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getIncludeGlobalRequirementRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleIncludeGlobalRequirement=ruleIncludeGlobalRequirement();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleIncludeGlobalRequirement; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleIncludeGlobalRequirement"


    // $ANTLR start "ruleIncludeGlobalRequirement"
    // InternalReqSpec.g:4760:1: ruleIncludeGlobalRequirement returns [EObject current=null] : (otherlv_0= 'include' ( ( ruleQualifiedName ) ) (otherlv_2= 'for' ( ( (lv_local_3_0= 'self' ) ) | ( (otherlv_4= RULE_ID ) ) ) )? ) ;
    public final EObject ruleIncludeGlobalRequirement() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_2=null;
        Token lv_local_3_0=null;
        Token otherlv_4=null;


        	enterRule();

        try {
            // InternalReqSpec.g:4766:2: ( (otherlv_0= 'include' ( ( ruleQualifiedName ) ) (otherlv_2= 'for' ( ( (lv_local_3_0= 'self' ) ) | ( (otherlv_4= RULE_ID ) ) ) )? ) )
            // InternalReqSpec.g:4767:2: (otherlv_0= 'include' ( ( ruleQualifiedName ) ) (otherlv_2= 'for' ( ( (lv_local_3_0= 'self' ) ) | ( (otherlv_4= RULE_ID ) ) ) )? )
            {
            // InternalReqSpec.g:4767:2: (otherlv_0= 'include' ( ( ruleQualifiedName ) ) (otherlv_2= 'for' ( ( (lv_local_3_0= 'self' ) ) | ( (otherlv_4= RULE_ID ) ) ) )? )
            // InternalReqSpec.g:4768:3: otherlv_0= 'include' ( ( ruleQualifiedName ) ) (otherlv_2= 'for' ( ( (lv_local_3_0= 'self' ) ) | ( (otherlv_4= RULE_ID ) ) ) )?
            {
            otherlv_0=(Token)match(input,44,FollowSets000.FOLLOW_4); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getIncludeGlobalRequirementAccess().getIncludeKeyword_0());
              		
            }
            // InternalReqSpec.g:4772:3: ( ( ruleQualifiedName ) )
            // InternalReqSpec.g:4773:4: ( ruleQualifiedName )
            {
            // InternalReqSpec.g:4773:4: ( ruleQualifiedName )
            // InternalReqSpec.g:4774:5: ruleQualifiedName
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getIncludeGlobalRequirementRule());
              					}
              				
            }
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getIncludeGlobalRequirementAccess().getIncludeEObjectCrossReference_1_0());
              				
            }
            pushFollow(FollowSets000.FOLLOW_52);
            ruleQualifiedName();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalReqSpec.g:4788:3: (otherlv_2= 'for' ( ( (lv_local_3_0= 'self' ) ) | ( (otherlv_4= RULE_ID ) ) ) )?
            int alt117=2;
            int LA117_0 = input.LA(1);

            if ( (LA117_0==23) ) {
                alt117=1;
            }
            switch (alt117) {
                case 1 :
                    // InternalReqSpec.g:4789:4: otherlv_2= 'for' ( ( (lv_local_3_0= 'self' ) ) | ( (otherlv_4= RULE_ID ) ) )
                    {
                    otherlv_2=(Token)match(input,23,FollowSets000.FOLLOW_53); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_2, grammarAccess.getIncludeGlobalRequirementAccess().getForKeyword_2_0());
                      			
                    }
                    // InternalReqSpec.g:4793:4: ( ( (lv_local_3_0= 'self' ) ) | ( (otherlv_4= RULE_ID ) ) )
                    int alt116=2;
                    int LA116_0 = input.LA(1);

                    if ( (LA116_0==45) ) {
                        alt116=1;
                    }
                    else if ( (LA116_0==RULE_ID) ) {
                        alt116=2;
                    }
                    else {
                        if (state.backtracking>0) {state.failed=true; return current;}
                        NoViableAltException nvae =
                            new NoViableAltException("", 116, 0, input);

                        throw nvae;
                    }
                    switch (alt116) {
                        case 1 :
                            // InternalReqSpec.g:4794:5: ( (lv_local_3_0= 'self' ) )
                            {
                            // InternalReqSpec.g:4794:5: ( (lv_local_3_0= 'self' ) )
                            // InternalReqSpec.g:4795:6: (lv_local_3_0= 'self' )
                            {
                            // InternalReqSpec.g:4795:6: (lv_local_3_0= 'self' )
                            // InternalReqSpec.g:4796:7: lv_local_3_0= 'self'
                            {
                            lv_local_3_0=(Token)match(input,45,FollowSets000.FOLLOW_2); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							newLeafNode(lv_local_3_0, grammarAccess.getIncludeGlobalRequirementAccess().getLocalSelfKeyword_2_1_0_0());
                              						
                            }
                            if ( state.backtracking==0 ) {

                              							if (current==null) {
                              								current = createModelElement(grammarAccess.getIncludeGlobalRequirementRule());
                              							}
                              							setWithLastConsumed(current, "local", true, "self");
                              						
                            }

                            }


                            }


                            }
                            break;
                        case 2 :
                            // InternalReqSpec.g:4809:5: ( (otherlv_4= RULE_ID ) )
                            {
                            // InternalReqSpec.g:4809:5: ( (otherlv_4= RULE_ID ) )
                            // InternalReqSpec.g:4810:6: (otherlv_4= RULE_ID )
                            {
                            // InternalReqSpec.g:4810:6: (otherlv_4= RULE_ID )
                            // InternalReqSpec.g:4811:7: otherlv_4= RULE_ID
                            {
                            if ( state.backtracking==0 ) {

                              							if (current==null) {
                              								current = createModelElement(grammarAccess.getIncludeGlobalRequirementRule());
                              							}
                              						
                            }
                            otherlv_4=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_2); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							newLeafNode(otherlv_4, grammarAccess.getIncludeGlobalRequirementAccess().getTargetElementNamedElementCrossReference_2_1_1_0());
                              						
                            }

                            }


                            }


                            }
                            break;

                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleIncludeGlobalRequirement"


    // $ANTLR start "entryRuleWhenCondition"
    // InternalReqSpec.g:4828:1: entryRuleWhenCondition returns [EObject current=null] : iv_ruleWhenCondition= ruleWhenCondition EOF ;
    public final EObject entryRuleWhenCondition() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleWhenCondition = null;


        try {
            // InternalReqSpec.g:4828:54: (iv_ruleWhenCondition= ruleWhenCondition EOF )
            // InternalReqSpec.g:4829:2: iv_ruleWhenCondition= ruleWhenCondition EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getWhenConditionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleWhenCondition=ruleWhenCondition();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleWhenCondition; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleWhenCondition"


    // $ANTLR start "ruleWhenCondition"
    // InternalReqSpec.g:4835:1: ruleWhenCondition returns [EObject current=null] : (otherlv_0= 'when' ( (otherlv_1= 'in' otherlv_2= 'mode' ( (otherlv_3= RULE_ID ) ) (otherlv_4= ',' ( (otherlv_5= RULE_ID ) ) )* ) | (otherlv_6= 'in' otherlv_7= 'error' otherlv_8= 'state' ( (otherlv_9= RULE_ID ) ) (otherlv_10= ',' ( (otherlv_11= RULE_ID ) ) )* ) | ( ( (lv_condition_12_0= ruleQualifiedName ) ) otherlv_13= '(' otherlv_14= ')' ) ) ) ;
    public final EObject ruleWhenCondition() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        Token otherlv_10=null;
        Token otherlv_11=null;
        Token otherlv_13=null;
        Token otherlv_14=null;
        AntlrDatatypeRuleToken lv_condition_12_0 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:4841:2: ( (otherlv_0= 'when' ( (otherlv_1= 'in' otherlv_2= 'mode' ( (otherlv_3= RULE_ID ) ) (otherlv_4= ',' ( (otherlv_5= RULE_ID ) ) )* ) | (otherlv_6= 'in' otherlv_7= 'error' otherlv_8= 'state' ( (otherlv_9= RULE_ID ) ) (otherlv_10= ',' ( (otherlv_11= RULE_ID ) ) )* ) | ( ( (lv_condition_12_0= ruleQualifiedName ) ) otherlv_13= '(' otherlv_14= ')' ) ) ) )
            // InternalReqSpec.g:4842:2: (otherlv_0= 'when' ( (otherlv_1= 'in' otherlv_2= 'mode' ( (otherlv_3= RULE_ID ) ) (otherlv_4= ',' ( (otherlv_5= RULE_ID ) ) )* ) | (otherlv_6= 'in' otherlv_7= 'error' otherlv_8= 'state' ( (otherlv_9= RULE_ID ) ) (otherlv_10= ',' ( (otherlv_11= RULE_ID ) ) )* ) | ( ( (lv_condition_12_0= ruleQualifiedName ) ) otherlv_13= '(' otherlv_14= ')' ) ) )
            {
            // InternalReqSpec.g:4842:2: (otherlv_0= 'when' ( (otherlv_1= 'in' otherlv_2= 'mode' ( (otherlv_3= RULE_ID ) ) (otherlv_4= ',' ( (otherlv_5= RULE_ID ) ) )* ) | (otherlv_6= 'in' otherlv_7= 'error' otherlv_8= 'state' ( (otherlv_9= RULE_ID ) ) (otherlv_10= ',' ( (otherlv_11= RULE_ID ) ) )* ) | ( ( (lv_condition_12_0= ruleQualifiedName ) ) otherlv_13= '(' otherlv_14= ')' ) ) )
            // InternalReqSpec.g:4843:3: otherlv_0= 'when' ( (otherlv_1= 'in' otherlv_2= 'mode' ( (otherlv_3= RULE_ID ) ) (otherlv_4= ',' ( (otherlv_5= RULE_ID ) ) )* ) | (otherlv_6= 'in' otherlv_7= 'error' otherlv_8= 'state' ( (otherlv_9= RULE_ID ) ) (otherlv_10= ',' ( (otherlv_11= RULE_ID ) ) )* ) | ( ( (lv_condition_12_0= ruleQualifiedName ) ) otherlv_13= '(' otherlv_14= ')' ) )
            {
            otherlv_0=(Token)match(input,46,FollowSets000.FOLLOW_54); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getWhenConditionAccess().getWhenKeyword_0());
              		
            }
            // InternalReqSpec.g:4847:3: ( (otherlv_1= 'in' otherlv_2= 'mode' ( (otherlv_3= RULE_ID ) ) (otherlv_4= ',' ( (otherlv_5= RULE_ID ) ) )* ) | (otherlv_6= 'in' otherlv_7= 'error' otherlv_8= 'state' ( (otherlv_9= RULE_ID ) ) (otherlv_10= ',' ( (otherlv_11= RULE_ID ) ) )* ) | ( ( (lv_condition_12_0= ruleQualifiedName ) ) otherlv_13= '(' otherlv_14= ')' ) )
            int alt120=3;
            int LA120_0 = input.LA(1);

            if ( (LA120_0==47) ) {
                int LA120_1 = input.LA(2);

                if ( (LA120_1==48) ) {
                    alt120=1;
                }
                else if ( (LA120_1==50) ) {
                    alt120=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return current;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 120, 1, input);

                    throw nvae;
                }
            }
            else if ( (LA120_0==RULE_ID) ) {
                alt120=3;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 120, 0, input);

                throw nvae;
            }
            switch (alt120) {
                case 1 :
                    // InternalReqSpec.g:4848:4: (otherlv_1= 'in' otherlv_2= 'mode' ( (otherlv_3= RULE_ID ) ) (otherlv_4= ',' ( (otherlv_5= RULE_ID ) ) )* )
                    {
                    // InternalReqSpec.g:4848:4: (otherlv_1= 'in' otherlv_2= 'mode' ( (otherlv_3= RULE_ID ) ) (otherlv_4= ',' ( (otherlv_5= RULE_ID ) ) )* )
                    // InternalReqSpec.g:4849:5: otherlv_1= 'in' otherlv_2= 'mode' ( (otherlv_3= RULE_ID ) ) (otherlv_4= ',' ( (otherlv_5= RULE_ID ) ) )*
                    {
                    otherlv_1=(Token)match(input,47,FollowSets000.FOLLOW_55); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_1, grammarAccess.getWhenConditionAccess().getInKeyword_1_0_0());
                      				
                    }
                    otherlv_2=(Token)match(input,48,FollowSets000.FOLLOW_4); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_2, grammarAccess.getWhenConditionAccess().getModeKeyword_1_0_1());
                      				
                    }
                    // InternalReqSpec.g:4857:5: ( (otherlv_3= RULE_ID ) )
                    // InternalReqSpec.g:4858:6: (otherlv_3= RULE_ID )
                    {
                    // InternalReqSpec.g:4858:6: (otherlv_3= RULE_ID )
                    // InternalReqSpec.g:4859:7: otherlv_3= RULE_ID
                    {
                    if ( state.backtracking==0 ) {

                      							if (current==null) {
                      								current = createModelElement(grammarAccess.getWhenConditionRule());
                      							}
                      						
                    }
                    otherlv_3=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_56); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							newLeafNode(otherlv_3, grammarAccess.getWhenConditionAccess().getInModeModeCrossReference_1_0_2_0());
                      						
                    }

                    }


                    }

                    // InternalReqSpec.g:4870:5: (otherlv_4= ',' ( (otherlv_5= RULE_ID ) ) )*
                    loop118:
                    do {
                        int alt118=2;
                        int LA118_0 = input.LA(1);

                        if ( (LA118_0==49) ) {
                            alt118=1;
                        }


                        switch (alt118) {
                    	case 1 :
                    	    // InternalReqSpec.g:4871:6: otherlv_4= ',' ( (otherlv_5= RULE_ID ) )
                    	    {
                    	    otherlv_4=(Token)match(input,49,FollowSets000.FOLLOW_4); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      						newLeafNode(otherlv_4, grammarAccess.getWhenConditionAccess().getCommaKeyword_1_0_3_0());
                    	      					
                    	    }
                    	    // InternalReqSpec.g:4875:6: ( (otherlv_5= RULE_ID ) )
                    	    // InternalReqSpec.g:4876:7: (otherlv_5= RULE_ID )
                    	    {
                    	    // InternalReqSpec.g:4876:7: (otherlv_5= RULE_ID )
                    	    // InternalReqSpec.g:4877:8: otherlv_5= RULE_ID
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      								if (current==null) {
                    	      									current = createModelElement(grammarAccess.getWhenConditionRule());
                    	      								}
                    	      							
                    	    }
                    	    otherlv_5=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_56); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      								newLeafNode(otherlv_5, grammarAccess.getWhenConditionAccess().getInModeModeCrossReference_1_0_3_1_0());
                    	      							
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop118;
                        }
                    } while (true);


                    }


                    }
                    break;
                case 2 :
                    // InternalReqSpec.g:4891:4: (otherlv_6= 'in' otherlv_7= 'error' otherlv_8= 'state' ( (otherlv_9= RULE_ID ) ) (otherlv_10= ',' ( (otherlv_11= RULE_ID ) ) )* )
                    {
                    // InternalReqSpec.g:4891:4: (otherlv_6= 'in' otherlv_7= 'error' otherlv_8= 'state' ( (otherlv_9= RULE_ID ) ) (otherlv_10= ',' ( (otherlv_11= RULE_ID ) ) )* )
                    // InternalReqSpec.g:4892:5: otherlv_6= 'in' otherlv_7= 'error' otherlv_8= 'state' ( (otherlv_9= RULE_ID ) ) (otherlv_10= ',' ( (otherlv_11= RULE_ID ) ) )*
                    {
                    otherlv_6=(Token)match(input,47,FollowSets000.FOLLOW_57); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_6, grammarAccess.getWhenConditionAccess().getInKeyword_1_1_0());
                      				
                    }
                    otherlv_7=(Token)match(input,50,FollowSets000.FOLLOW_58); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_7, grammarAccess.getWhenConditionAccess().getErrorKeyword_1_1_1());
                      				
                    }
                    otherlv_8=(Token)match(input,51,FollowSets000.FOLLOW_4); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_8, grammarAccess.getWhenConditionAccess().getStateKeyword_1_1_2());
                      				
                    }
                    // InternalReqSpec.g:4904:5: ( (otherlv_9= RULE_ID ) )
                    // InternalReqSpec.g:4905:6: (otherlv_9= RULE_ID )
                    {
                    // InternalReqSpec.g:4905:6: (otherlv_9= RULE_ID )
                    // InternalReqSpec.g:4906:7: otherlv_9= RULE_ID
                    {
                    if ( state.backtracking==0 ) {

                      							if (current==null) {
                      								current = createModelElement(grammarAccess.getWhenConditionRule());
                      							}
                      						
                    }
                    otherlv_9=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_56); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							newLeafNode(otherlv_9, grammarAccess.getWhenConditionAccess().getInErrorStateEObjectCrossReference_1_1_3_0());
                      						
                    }

                    }


                    }

                    // InternalReqSpec.g:4917:5: (otherlv_10= ',' ( (otherlv_11= RULE_ID ) ) )*
                    loop119:
                    do {
                        int alt119=2;
                        int LA119_0 = input.LA(1);

                        if ( (LA119_0==49) ) {
                            alt119=1;
                        }


                        switch (alt119) {
                    	case 1 :
                    	    // InternalReqSpec.g:4918:6: otherlv_10= ',' ( (otherlv_11= RULE_ID ) )
                    	    {
                    	    otherlv_10=(Token)match(input,49,FollowSets000.FOLLOW_4); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      						newLeafNode(otherlv_10, grammarAccess.getWhenConditionAccess().getCommaKeyword_1_1_4_0());
                    	      					
                    	    }
                    	    // InternalReqSpec.g:4922:6: ( (otherlv_11= RULE_ID ) )
                    	    // InternalReqSpec.g:4923:7: (otherlv_11= RULE_ID )
                    	    {
                    	    // InternalReqSpec.g:4923:7: (otherlv_11= RULE_ID )
                    	    // InternalReqSpec.g:4924:8: otherlv_11= RULE_ID
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      								if (current==null) {
                    	      									current = createModelElement(grammarAccess.getWhenConditionRule());
                    	      								}
                    	      							
                    	    }
                    	    otherlv_11=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_56); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      								newLeafNode(otherlv_11, grammarAccess.getWhenConditionAccess().getInErrorStateEObjectCrossReference_1_1_4_1_0());
                    	      							
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop119;
                        }
                    } while (true);


                    }


                    }
                    break;
                case 3 :
                    // InternalReqSpec.g:4938:4: ( ( (lv_condition_12_0= ruleQualifiedName ) ) otherlv_13= '(' otherlv_14= ')' )
                    {
                    // InternalReqSpec.g:4938:4: ( ( (lv_condition_12_0= ruleQualifiedName ) ) otherlv_13= '(' otherlv_14= ')' )
                    // InternalReqSpec.g:4939:5: ( (lv_condition_12_0= ruleQualifiedName ) ) otherlv_13= '(' otherlv_14= ')'
                    {
                    // InternalReqSpec.g:4939:5: ( (lv_condition_12_0= ruleQualifiedName ) )
                    // InternalReqSpec.g:4940:6: (lv_condition_12_0= ruleQualifiedName )
                    {
                    // InternalReqSpec.g:4940:6: (lv_condition_12_0= ruleQualifiedName )
                    // InternalReqSpec.g:4941:7: lv_condition_12_0= ruleQualifiedName
                    {
                    if ( state.backtracking==0 ) {

                      							newCompositeNode(grammarAccess.getWhenConditionAccess().getConditionQualifiedNameParserRuleCall_1_2_0_0());
                      						
                    }
                    pushFollow(FollowSets000.FOLLOW_59);
                    lv_condition_12_0=ruleQualifiedName();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							if (current==null) {
                      								current = createModelElementForParent(grammarAccess.getWhenConditionRule());
                      							}
                      							set(
                      								current,
                      								"condition",
                      								lv_condition_12_0,
                      								"org.osate.alisa.common.Common.QualifiedName");
                      							afterParserOrEnumRuleCall();
                      						
                    }

                    }


                    }

                    otherlv_13=(Token)match(input,52,FollowSets000.FOLLOW_60); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_13, grammarAccess.getWhenConditionAccess().getLeftParenthesisKeyword_1_2_1());
                      				
                    }
                    otherlv_14=(Token)match(input,53,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_14, grammarAccess.getWhenConditionAccess().getRightParenthesisKeyword_1_2_2());
                      				
                    }

                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleWhenCondition"


    // $ANTLR start "entryRuleReqPredicate"
    // InternalReqSpec.g:4972:1: entryRuleReqPredicate returns [EObject current=null] : iv_ruleReqPredicate= ruleReqPredicate EOF ;
    public final EObject entryRuleReqPredicate() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleReqPredicate = null;


        try {
            // InternalReqSpec.g:4972:53: (iv_ruleReqPredicate= ruleReqPredicate EOF )
            // InternalReqSpec.g:4973:2: iv_ruleReqPredicate= ruleReqPredicate EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getReqPredicateRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleReqPredicate=ruleReqPredicate();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleReqPredicate; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleReqPredicate"


    // $ANTLR start "ruleReqPredicate"
    // InternalReqSpec.g:4979:1: ruleReqPredicate returns [EObject current=null] : (this_InformalPredicate_0= ruleInformalPredicate | this_ValuePredicate_1= ruleValuePredicate ) ;
    public final EObject ruleReqPredicate() throws RecognitionException {
        EObject current = null;

        EObject this_InformalPredicate_0 = null;

        EObject this_ValuePredicate_1 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:4985:2: ( (this_InformalPredicate_0= ruleInformalPredicate | this_ValuePredicate_1= ruleValuePredicate ) )
            // InternalReqSpec.g:4986:2: (this_InformalPredicate_0= ruleInformalPredicate | this_ValuePredicate_1= ruleValuePredicate )
            {
            // InternalReqSpec.g:4986:2: (this_InformalPredicate_0= ruleInformalPredicate | this_ValuePredicate_1= ruleValuePredicate )
            int alt121=2;
            int LA121_0 = input.LA(1);

            if ( (LA121_0==54) ) {
                alt121=1;
            }
            else if ( (LA121_0==56) ) {
                alt121=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 121, 0, input);

                throw nvae;
            }
            switch (alt121) {
                case 1 :
                    // InternalReqSpec.g:4987:3: this_InformalPredicate_0= ruleInformalPredicate
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getReqPredicateAccess().getInformalPredicateParserRuleCall_0());
                      		
                    }
                    pushFollow(FollowSets000.FOLLOW_2);
                    this_InformalPredicate_0=ruleInformalPredicate();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_InformalPredicate_0;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalReqSpec.g:4996:3: this_ValuePredicate_1= ruleValuePredicate
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getReqPredicateAccess().getValuePredicateParserRuleCall_1());
                      		
                    }
                    pushFollow(FollowSets000.FOLLOW_2);
                    this_ValuePredicate_1=ruleValuePredicate();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_ValuePredicate_1;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleReqPredicate"


    // $ANTLR start "entryRuleInformalPredicate"
    // InternalReqSpec.g:5008:1: entryRuleInformalPredicate returns [EObject current=null] : iv_ruleInformalPredicate= ruleInformalPredicate EOF ;
    public final EObject entryRuleInformalPredicate() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleInformalPredicate = null;


        try {
            // InternalReqSpec.g:5008:58: (iv_ruleInformalPredicate= ruleInformalPredicate EOF )
            // InternalReqSpec.g:5009:2: iv_ruleInformalPredicate= ruleInformalPredicate EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getInformalPredicateRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleInformalPredicate=ruleInformalPredicate();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleInformalPredicate; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleInformalPredicate"


    // $ANTLR start "ruleInformalPredicate"
    // InternalReqSpec.g:5015:1: ruleInformalPredicate returns [EObject current=null] : (otherlv_0= 'informal' otherlv_1= 'predicate' ( (lv_description_2_0= RULE_STRING ) ) ) ;
    public final EObject ruleInformalPredicate() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token lv_description_2_0=null;


        	enterRule();

        try {
            // InternalReqSpec.g:5021:2: ( (otherlv_0= 'informal' otherlv_1= 'predicate' ( (lv_description_2_0= RULE_STRING ) ) ) )
            // InternalReqSpec.g:5022:2: (otherlv_0= 'informal' otherlv_1= 'predicate' ( (lv_description_2_0= RULE_STRING ) ) )
            {
            // InternalReqSpec.g:5022:2: (otherlv_0= 'informal' otherlv_1= 'predicate' ( (lv_description_2_0= RULE_STRING ) ) )
            // InternalReqSpec.g:5023:3: otherlv_0= 'informal' otherlv_1= 'predicate' ( (lv_description_2_0= RULE_STRING ) )
            {
            otherlv_0=(Token)match(input,54,FollowSets000.FOLLOW_61); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getInformalPredicateAccess().getInformalKeyword_0());
              		
            }
            otherlv_1=(Token)match(input,55,FollowSets000.FOLLOW_9); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getInformalPredicateAccess().getPredicateKeyword_1());
              		
            }
            // InternalReqSpec.g:5031:3: ( (lv_description_2_0= RULE_STRING ) )
            // InternalReqSpec.g:5032:4: (lv_description_2_0= RULE_STRING )
            {
            // InternalReqSpec.g:5032:4: (lv_description_2_0= RULE_STRING )
            // InternalReqSpec.g:5033:5: lv_description_2_0= RULE_STRING
            {
            lv_description_2_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_description_2_0, grammarAccess.getInformalPredicateAccess().getDescriptionSTRINGTerminalRuleCall_2_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getInformalPredicateRule());
              					}
              					setWithLastConsumed(
              						current,
              						"description",
              						lv_description_2_0,
              						"org.eclipse.xtext.common.Terminals.STRING");
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleInformalPredicate"


    // $ANTLR start "entryRuleValuePredicate"
    // InternalReqSpec.g:5053:1: entryRuleValuePredicate returns [EObject current=null] : iv_ruleValuePredicate= ruleValuePredicate EOF ;
    public final EObject entryRuleValuePredicate() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleValuePredicate = null;


        try {
            // InternalReqSpec.g:5053:55: (iv_ruleValuePredicate= ruleValuePredicate EOF )
            // InternalReqSpec.g:5054:2: iv_ruleValuePredicate= ruleValuePredicate EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getValuePredicateRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleValuePredicate=ruleValuePredicate();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleValuePredicate; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleValuePredicate"


    // $ANTLR start "ruleValuePredicate"
    // InternalReqSpec.g:5060:1: ruleValuePredicate returns [EObject current=null] : (otherlv_0= 'value' otherlv_1= 'predicate' ( (lv_xpression_2_0= ruleAAndExpression ) ) (otherlv_3= 'with' ( (lv_desiredValue_4_0= ruleDesiredValue ) )+ )? ) ;
    public final EObject ruleValuePredicate() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        EObject lv_xpression_2_0 = null;

        EObject lv_desiredValue_4_0 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:5066:2: ( (otherlv_0= 'value' otherlv_1= 'predicate' ( (lv_xpression_2_0= ruleAAndExpression ) ) (otherlv_3= 'with' ( (lv_desiredValue_4_0= ruleDesiredValue ) )+ )? ) )
            // InternalReqSpec.g:5067:2: (otherlv_0= 'value' otherlv_1= 'predicate' ( (lv_xpression_2_0= ruleAAndExpression ) ) (otherlv_3= 'with' ( (lv_desiredValue_4_0= ruleDesiredValue ) )+ )? )
            {
            // InternalReqSpec.g:5067:2: (otherlv_0= 'value' otherlv_1= 'predicate' ( (lv_xpression_2_0= ruleAAndExpression ) ) (otherlv_3= 'with' ( (lv_desiredValue_4_0= ruleDesiredValue ) )+ )? )
            // InternalReqSpec.g:5068:3: otherlv_0= 'value' otherlv_1= 'predicate' ( (lv_xpression_2_0= ruleAAndExpression ) ) (otherlv_3= 'with' ( (lv_desiredValue_4_0= ruleDesiredValue ) )+ )?
            {
            otherlv_0=(Token)match(input,56,FollowSets000.FOLLOW_61); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getValuePredicateAccess().getValueKeyword_0());
              		
            }
            otherlv_1=(Token)match(input,55,FollowSets000.FOLLOW_62); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getValuePredicateAccess().getPredicateKeyword_1());
              		
            }
            // InternalReqSpec.g:5076:3: ( (lv_xpression_2_0= ruleAAndExpression ) )
            // InternalReqSpec.g:5077:4: (lv_xpression_2_0= ruleAAndExpression )
            {
            // InternalReqSpec.g:5077:4: (lv_xpression_2_0= ruleAAndExpression )
            // InternalReqSpec.g:5078:5: lv_xpression_2_0= ruleAAndExpression
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getValuePredicateAccess().getXpressionAAndExpressionParserRuleCall_2_0());
              				
            }
            pushFollow(FollowSets000.FOLLOW_63);
            lv_xpression_2_0=ruleAAndExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getValuePredicateRule());
              					}
              					set(
              						current,
              						"xpression",
              						lv_xpression_2_0,
              						"org.osate.alisa.common.Common.AAndExpression");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalReqSpec.g:5095:3: (otherlv_3= 'with' ( (lv_desiredValue_4_0= ruleDesiredValue ) )+ )?
            int alt123=2;
            int LA123_0 = input.LA(1);

            if ( (LA123_0==36) ) {
                alt123=1;
            }
            switch (alt123) {
                case 1 :
                    // InternalReqSpec.g:5096:4: otherlv_3= 'with' ( (lv_desiredValue_4_0= ruleDesiredValue ) )+
                    {
                    otherlv_3=(Token)match(input,36,FollowSets000.FOLLOW_4); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_3, grammarAccess.getValuePredicateAccess().getWithKeyword_3_0());
                      			
                    }
                    // InternalReqSpec.g:5100:4: ( (lv_desiredValue_4_0= ruleDesiredValue ) )+
                    int cnt122=0;
                    loop122:
                    do {
                        int alt122=2;
                        int LA122_0 = input.LA(1);

                        if ( (LA122_0==RULE_ID) ) {
                            alt122=1;
                        }


                        switch (alt122) {
                    	case 1 :
                    	    // InternalReqSpec.g:5101:5: (lv_desiredValue_4_0= ruleDesiredValue )
                    	    {
                    	    // InternalReqSpec.g:5101:5: (lv_desiredValue_4_0= ruleDesiredValue )
                    	    // InternalReqSpec.g:5102:6: lv_desiredValue_4_0= ruleDesiredValue
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      						newCompositeNode(grammarAccess.getValuePredicateAccess().getDesiredValueDesiredValueParserRuleCall_3_1_0());
                    	      					
                    	    }
                    	    pushFollow(FollowSets000.FOLLOW_64);
                    	    lv_desiredValue_4_0=ruleDesiredValue();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      						if (current==null) {
                    	      							current = createModelElementForParent(grammarAccess.getValuePredicateRule());
                    	      						}
                    	      						add(
                    	      							current,
                    	      							"desiredValue",
                    	      							lv_desiredValue_4_0,
                    	      							"org.osate.reqspec.ReqSpec.DesiredValue");
                    	      						afterParserOrEnumRuleCall();
                    	      					
                    	    }

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt122 >= 1 ) break loop122;
                    	    if (state.backtracking>0) {state.failed=true; return current;}
                                EarlyExitException eee =
                                    new EarlyExitException(122, input);
                                throw eee;
                        }
                        cnt122++;
                    } while (true);


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleValuePredicate"


    // $ANTLR start "entryRuleDesiredValue"
    // InternalReqSpec.g:5124:1: entryRuleDesiredValue returns [EObject current=null] : iv_ruleDesiredValue= ruleDesiredValue EOF ;
    public final EObject entryRuleDesiredValue() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDesiredValue = null;


        try {
            // InternalReqSpec.g:5124:53: (iv_ruleDesiredValue= ruleDesiredValue EOF )
            // InternalReqSpec.g:5125:2: iv_ruleDesiredValue= ruleDesiredValue EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getDesiredValueRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleDesiredValue=ruleDesiredValue();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleDesiredValue; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDesiredValue"


    // $ANTLR start "ruleDesiredValue"
    // InternalReqSpec.g:5131:1: ruleDesiredValue returns [EObject current=null] : ( ( (lv_desired_0_0= ruleAVariableReference ) ) ( ( (lv_upto_1_0= 'upto' ) ) | otherlv_2= 'downto' ) ( (lv_value_3_0= ruleAExpression ) ) ) ;
    public final EObject ruleDesiredValue() throws RecognitionException {
        EObject current = null;

        Token lv_upto_1_0=null;
        Token otherlv_2=null;
        EObject lv_desired_0_0 = null;

        EObject lv_value_3_0 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:5137:2: ( ( ( (lv_desired_0_0= ruleAVariableReference ) ) ( ( (lv_upto_1_0= 'upto' ) ) | otherlv_2= 'downto' ) ( (lv_value_3_0= ruleAExpression ) ) ) )
            // InternalReqSpec.g:5138:2: ( ( (lv_desired_0_0= ruleAVariableReference ) ) ( ( (lv_upto_1_0= 'upto' ) ) | otherlv_2= 'downto' ) ( (lv_value_3_0= ruleAExpression ) ) )
            {
            // InternalReqSpec.g:5138:2: ( ( (lv_desired_0_0= ruleAVariableReference ) ) ( ( (lv_upto_1_0= 'upto' ) ) | otherlv_2= 'downto' ) ( (lv_value_3_0= ruleAExpression ) ) )
            // InternalReqSpec.g:5139:3: ( (lv_desired_0_0= ruleAVariableReference ) ) ( ( (lv_upto_1_0= 'upto' ) ) | otherlv_2= 'downto' ) ( (lv_value_3_0= ruleAExpression ) )
            {
            // InternalReqSpec.g:5139:3: ( (lv_desired_0_0= ruleAVariableReference ) )
            // InternalReqSpec.g:5140:4: (lv_desired_0_0= ruleAVariableReference )
            {
            // InternalReqSpec.g:5140:4: (lv_desired_0_0= ruleAVariableReference )
            // InternalReqSpec.g:5141:5: lv_desired_0_0= ruleAVariableReference
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getDesiredValueAccess().getDesiredAVariableReferenceParserRuleCall_0_0());
              				
            }
            pushFollow(FollowSets000.FOLLOW_65);
            lv_desired_0_0=ruleAVariableReference();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getDesiredValueRule());
              					}
              					set(
              						current,
              						"desired",
              						lv_desired_0_0,
              						"org.osate.alisa.common.Common.AVariableReference");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalReqSpec.g:5158:3: ( ( (lv_upto_1_0= 'upto' ) ) | otherlv_2= 'downto' )
            int alt124=2;
            int LA124_0 = input.LA(1);

            if ( (LA124_0==57) ) {
                alt124=1;
            }
            else if ( (LA124_0==58) ) {
                alt124=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 124, 0, input);

                throw nvae;
            }
            switch (alt124) {
                case 1 :
                    // InternalReqSpec.g:5159:4: ( (lv_upto_1_0= 'upto' ) )
                    {
                    // InternalReqSpec.g:5159:4: ( (lv_upto_1_0= 'upto' ) )
                    // InternalReqSpec.g:5160:5: (lv_upto_1_0= 'upto' )
                    {
                    // InternalReqSpec.g:5160:5: (lv_upto_1_0= 'upto' )
                    // InternalReqSpec.g:5161:6: lv_upto_1_0= 'upto'
                    {
                    lv_upto_1_0=(Token)match(input,57,FollowSets000.FOLLOW_62); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_upto_1_0, grammarAccess.getDesiredValueAccess().getUptoUptoKeyword_1_0_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getDesiredValueRule());
                      						}
                      						setWithLastConsumed(current, "upto", true, "upto");
                      					
                    }

                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalReqSpec.g:5174:4: otherlv_2= 'downto'
                    {
                    otherlv_2=(Token)match(input,58,FollowSets000.FOLLOW_62); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_2, grammarAccess.getDesiredValueAccess().getDowntoKeyword_1_1());
                      			
                    }

                    }
                    break;

            }

            // InternalReqSpec.g:5179:3: ( (lv_value_3_0= ruleAExpression ) )
            // InternalReqSpec.g:5180:4: (lv_value_3_0= ruleAExpression )
            {
            // InternalReqSpec.g:5180:4: (lv_value_3_0= ruleAExpression )
            // InternalReqSpec.g:5181:5: lv_value_3_0= ruleAExpression
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getDesiredValueAccess().getValueAExpressionParserRuleCall_2_0());
              				
            }
            pushFollow(FollowSets000.FOLLOW_2);
            lv_value_3_0=ruleAExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getDesiredValueRule());
              					}
              					set(
              						current,
              						"value",
              						lv_value_3_0,
              						"org.osate.alisa.common.Common.AExpression");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDesiredValue"


    // $ANTLR start "entryRuleExternalDocument"
    // InternalReqSpec.g:5202:1: entryRuleExternalDocument returns [EObject current=null] : iv_ruleExternalDocument= ruleExternalDocument EOF ;
    public final EObject entryRuleExternalDocument() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleExternalDocument = null;


        try {
            // InternalReqSpec.g:5202:57: (iv_ruleExternalDocument= ruleExternalDocument EOF )
            // InternalReqSpec.g:5203:2: iv_ruleExternalDocument= ruleExternalDocument EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getExternalDocumentRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleExternalDocument=ruleExternalDocument();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleExternalDocument; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleExternalDocument"


    // $ANTLR start "ruleExternalDocument"
    // InternalReqSpec.g:5209:1: ruleExternalDocument returns [EObject current=null] : ( ( (lv_docReference_0_0= ruleDOCPATH ) ) (otherlv_1= '#' ( (lv_docFragment_2_0= ruleQualifiedName ) ) )? ) ;
    public final EObject ruleExternalDocument() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        AntlrDatatypeRuleToken lv_docReference_0_0 = null;

        AntlrDatatypeRuleToken lv_docFragment_2_0 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:5215:2: ( ( ( (lv_docReference_0_0= ruleDOCPATH ) ) (otherlv_1= '#' ( (lv_docFragment_2_0= ruleQualifiedName ) ) )? ) )
            // InternalReqSpec.g:5216:2: ( ( (lv_docReference_0_0= ruleDOCPATH ) ) (otherlv_1= '#' ( (lv_docFragment_2_0= ruleQualifiedName ) ) )? )
            {
            // InternalReqSpec.g:5216:2: ( ( (lv_docReference_0_0= ruleDOCPATH ) ) (otherlv_1= '#' ( (lv_docFragment_2_0= ruleQualifiedName ) ) )? )
            // InternalReqSpec.g:5217:3: ( (lv_docReference_0_0= ruleDOCPATH ) ) (otherlv_1= '#' ( (lv_docFragment_2_0= ruleQualifiedName ) ) )?
            {
            // InternalReqSpec.g:5217:3: ( (lv_docReference_0_0= ruleDOCPATH ) )
            // InternalReqSpec.g:5218:4: (lv_docReference_0_0= ruleDOCPATH )
            {
            // InternalReqSpec.g:5218:4: (lv_docReference_0_0= ruleDOCPATH )
            // InternalReqSpec.g:5219:5: lv_docReference_0_0= ruleDOCPATH
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getExternalDocumentAccess().getDocReferenceDOCPATHParserRuleCall_0_0());
              				
            }
            pushFollow(FollowSets000.FOLLOW_66);
            lv_docReference_0_0=ruleDOCPATH();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getExternalDocumentRule());
              					}
              					set(
              						current,
              						"docReference",
              						lv_docReference_0_0,
              						"org.osate.reqspec.ReqSpec.DOCPATH");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalReqSpec.g:5236:3: (otherlv_1= '#' ( (lv_docFragment_2_0= ruleQualifiedName ) ) )?
            int alt125=2;
            int LA125_0 = input.LA(1);

            if ( (LA125_0==59) ) {
                alt125=1;
            }
            switch (alt125) {
                case 1 :
                    // InternalReqSpec.g:5237:4: otherlv_1= '#' ( (lv_docFragment_2_0= ruleQualifiedName ) )
                    {
                    otherlv_1=(Token)match(input,59,FollowSets000.FOLLOW_4); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_1, grammarAccess.getExternalDocumentAccess().getNumberSignKeyword_1_0());
                      			
                    }
                    // InternalReqSpec.g:5241:4: ( (lv_docFragment_2_0= ruleQualifiedName ) )
                    // InternalReqSpec.g:5242:5: (lv_docFragment_2_0= ruleQualifiedName )
                    {
                    // InternalReqSpec.g:5242:5: (lv_docFragment_2_0= ruleQualifiedName )
                    // InternalReqSpec.g:5243:6: lv_docFragment_2_0= ruleQualifiedName
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getExternalDocumentAccess().getDocFragmentQualifiedNameParserRuleCall_1_1_0());
                      					
                    }
                    pushFollow(FollowSets000.FOLLOW_2);
                    lv_docFragment_2_0=ruleQualifiedName();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getExternalDocumentRule());
                      						}
                      						set(
                      							current,
                      							"docFragment",
                      							lv_docFragment_2_0,
                      							"org.osate.alisa.common.Common.QualifiedName");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleExternalDocument"


    // $ANTLR start "entryRuleValDeclaration"
    // InternalReqSpec.g:5265:1: entryRuleValDeclaration returns [EObject current=null] : iv_ruleValDeclaration= ruleValDeclaration EOF ;
    public final EObject entryRuleValDeclaration() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleValDeclaration = null;


        try {
            // InternalReqSpec.g:5265:55: (iv_ruleValDeclaration= ruleValDeclaration EOF )
            // InternalReqSpec.g:5266:2: iv_ruleValDeclaration= ruleValDeclaration EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getValDeclarationRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleValDeclaration=ruleValDeclaration();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleValDeclaration; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleValDeclaration"


    // $ANTLR start "ruleValDeclaration"
    // InternalReqSpec.g:5272:1: ruleValDeclaration returns [EObject current=null] : ( () otherlv_1= 'val' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= ':' ( ( (lv_type_4_0= ruleTypeRef ) ) | (otherlv_5= 'typeof' ( (lv_type_6_0= rulePropertyRef ) ) ) | ( ( (lv_range_7_0= '[' ) ) ( ( (lv_type_8_0= ruleTypeRef ) ) | (otherlv_9= 'typeof' ( (lv_type_10_0= rulePropertyRef ) ) ) ) otherlv_11= ']' ) ) )? otherlv_12= '=' ( (lv_value_13_0= ruleAExpression ) ) (otherlv_14= 'as' ( (lv_property_15_0= rulePropertyRef ) ) )? ) ;
    public final EObject ruleValDeclaration() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token lv_name_2_0=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        Token lv_range_7_0=null;
        Token otherlv_9=null;
        Token otherlv_11=null;
        Token otherlv_12=null;
        Token otherlv_14=null;
        EObject lv_type_4_0 = null;

        EObject lv_type_6_0 = null;

        EObject lv_type_8_0 = null;

        EObject lv_type_10_0 = null;

        EObject lv_value_13_0 = null;

        EObject lv_property_15_0 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:5278:2: ( ( () otherlv_1= 'val' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= ':' ( ( (lv_type_4_0= ruleTypeRef ) ) | (otherlv_5= 'typeof' ( (lv_type_6_0= rulePropertyRef ) ) ) | ( ( (lv_range_7_0= '[' ) ) ( ( (lv_type_8_0= ruleTypeRef ) ) | (otherlv_9= 'typeof' ( (lv_type_10_0= rulePropertyRef ) ) ) ) otherlv_11= ']' ) ) )? otherlv_12= '=' ( (lv_value_13_0= ruleAExpression ) ) (otherlv_14= 'as' ( (lv_property_15_0= rulePropertyRef ) ) )? ) )
            // InternalReqSpec.g:5279:2: ( () otherlv_1= 'val' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= ':' ( ( (lv_type_4_0= ruleTypeRef ) ) | (otherlv_5= 'typeof' ( (lv_type_6_0= rulePropertyRef ) ) ) | ( ( (lv_range_7_0= '[' ) ) ( ( (lv_type_8_0= ruleTypeRef ) ) | (otherlv_9= 'typeof' ( (lv_type_10_0= rulePropertyRef ) ) ) ) otherlv_11= ']' ) ) )? otherlv_12= '=' ( (lv_value_13_0= ruleAExpression ) ) (otherlv_14= 'as' ( (lv_property_15_0= rulePropertyRef ) ) )? )
            {
            // InternalReqSpec.g:5279:2: ( () otherlv_1= 'val' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= ':' ( ( (lv_type_4_0= ruleTypeRef ) ) | (otherlv_5= 'typeof' ( (lv_type_6_0= rulePropertyRef ) ) ) | ( ( (lv_range_7_0= '[' ) ) ( ( (lv_type_8_0= ruleTypeRef ) ) | (otherlv_9= 'typeof' ( (lv_type_10_0= rulePropertyRef ) ) ) ) otherlv_11= ']' ) ) )? otherlv_12= '=' ( (lv_value_13_0= ruleAExpression ) ) (otherlv_14= 'as' ( (lv_property_15_0= rulePropertyRef ) ) )? )
            // InternalReqSpec.g:5280:3: () otherlv_1= 'val' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= ':' ( ( (lv_type_4_0= ruleTypeRef ) ) | (otherlv_5= 'typeof' ( (lv_type_6_0= rulePropertyRef ) ) ) | ( ( (lv_range_7_0= '[' ) ) ( ( (lv_type_8_0= ruleTypeRef ) ) | (otherlv_9= 'typeof' ( (lv_type_10_0= rulePropertyRef ) ) ) ) otherlv_11= ']' ) ) )? otherlv_12= '=' ( (lv_value_13_0= ruleAExpression ) ) (otherlv_14= 'as' ( (lv_property_15_0= rulePropertyRef ) ) )?
            {
            // InternalReqSpec.g:5280:3: ()
            // InternalReqSpec.g:5281:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getValDeclarationAccess().getReqValDeclarationAction_0(),
              					current);
              			
            }

            }

            otherlv_1=(Token)match(input,60,FollowSets000.FOLLOW_4); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getValDeclarationAccess().getValKeyword_1());
              		
            }
            // InternalReqSpec.g:5291:3: ( (lv_name_2_0= RULE_ID ) )
            // InternalReqSpec.g:5292:4: (lv_name_2_0= RULE_ID )
            {
            // InternalReqSpec.g:5292:4: (lv_name_2_0= RULE_ID )
            // InternalReqSpec.g:5293:5: lv_name_2_0= RULE_ID
            {
            lv_name_2_0=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_67); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_2_0, grammarAccess.getValDeclarationAccess().getNameIDTerminalRuleCall_2_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getValDeclarationRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_2_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalReqSpec.g:5309:3: (otherlv_3= ':' ( ( (lv_type_4_0= ruleTypeRef ) ) | (otherlv_5= 'typeof' ( (lv_type_6_0= rulePropertyRef ) ) ) | ( ( (lv_range_7_0= '[' ) ) ( ( (lv_type_8_0= ruleTypeRef ) ) | (otherlv_9= 'typeof' ( (lv_type_10_0= rulePropertyRef ) ) ) ) otherlv_11= ']' ) ) )?
            int alt128=2;
            int LA128_0 = input.LA(1);

            if ( (LA128_0==22) ) {
                alt128=1;
            }
            switch (alt128) {
                case 1 :
                    // InternalReqSpec.g:5310:4: otherlv_3= ':' ( ( (lv_type_4_0= ruleTypeRef ) ) | (otherlv_5= 'typeof' ( (lv_type_6_0= rulePropertyRef ) ) ) | ( ( (lv_range_7_0= '[' ) ) ( ( (lv_type_8_0= ruleTypeRef ) ) | (otherlv_9= 'typeof' ( (lv_type_10_0= rulePropertyRef ) ) ) ) otherlv_11= ']' ) )
                    {
                    otherlv_3=(Token)match(input,22,FollowSets000.FOLLOW_68); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_3, grammarAccess.getValDeclarationAccess().getColonKeyword_3_0());
                      			
                    }
                    // InternalReqSpec.g:5314:4: ( ( (lv_type_4_0= ruleTypeRef ) ) | (otherlv_5= 'typeof' ( (lv_type_6_0= rulePropertyRef ) ) ) | ( ( (lv_range_7_0= '[' ) ) ( ( (lv_type_8_0= ruleTypeRef ) ) | (otherlv_9= 'typeof' ( (lv_type_10_0= rulePropertyRef ) ) ) ) otherlv_11= ']' ) )
                    int alt127=3;
                    switch ( input.LA(1) ) {
                    case RULE_ID:
                    case 73:
                    case 74:
                    case 76:
                    case 77:
                    case 78:
                        {
                        alt127=1;
                        }
                        break;
                    case 61:
                        {
                        alt127=2;
                        }
                        break;
                    case 18:
                        {
                        alt127=3;
                        }
                        break;
                    default:
                        if (state.backtracking>0) {state.failed=true; return current;}
                        NoViableAltException nvae =
                            new NoViableAltException("", 127, 0, input);

                        throw nvae;
                    }

                    switch (alt127) {
                        case 1 :
                            // InternalReqSpec.g:5315:5: ( (lv_type_4_0= ruleTypeRef ) )
                            {
                            // InternalReqSpec.g:5315:5: ( (lv_type_4_0= ruleTypeRef ) )
                            // InternalReqSpec.g:5316:6: (lv_type_4_0= ruleTypeRef )
                            {
                            // InternalReqSpec.g:5316:6: (lv_type_4_0= ruleTypeRef )
                            // InternalReqSpec.g:5317:7: lv_type_4_0= ruleTypeRef
                            {
                            if ( state.backtracking==0 ) {

                              							newCompositeNode(grammarAccess.getValDeclarationAccess().getTypeTypeRefParserRuleCall_3_1_0_0());
                              						
                            }
                            pushFollow(FollowSets000.FOLLOW_69);
                            lv_type_4_0=ruleTypeRef();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							if (current==null) {
                              								current = createModelElementForParent(grammarAccess.getValDeclarationRule());
                              							}
                              							set(
                              								current,
                              								"type",
                              								lv_type_4_0,
                              								"org.osate.alisa.common.Common.TypeRef");
                              							afterParserOrEnumRuleCall();
                              						
                            }

                            }


                            }


                            }
                            break;
                        case 2 :
                            // InternalReqSpec.g:5335:5: (otherlv_5= 'typeof' ( (lv_type_6_0= rulePropertyRef ) ) )
                            {
                            // InternalReqSpec.g:5335:5: (otherlv_5= 'typeof' ( (lv_type_6_0= rulePropertyRef ) ) )
                            // InternalReqSpec.g:5336:6: otherlv_5= 'typeof' ( (lv_type_6_0= rulePropertyRef ) )
                            {
                            otherlv_5=(Token)match(input,61,FollowSets000.FOLLOW_70); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              						newLeafNode(otherlv_5, grammarAccess.getValDeclarationAccess().getTypeofKeyword_3_1_1_0());
                              					
                            }
                            // InternalReqSpec.g:5340:6: ( (lv_type_6_0= rulePropertyRef ) )
                            // InternalReqSpec.g:5341:7: (lv_type_6_0= rulePropertyRef )
                            {
                            // InternalReqSpec.g:5341:7: (lv_type_6_0= rulePropertyRef )
                            // InternalReqSpec.g:5342:8: lv_type_6_0= rulePropertyRef
                            {
                            if ( state.backtracking==0 ) {

                              								newCompositeNode(grammarAccess.getValDeclarationAccess().getTypePropertyRefParserRuleCall_3_1_1_1_0());
                              							
                            }
                            pushFollow(FollowSets000.FOLLOW_69);
                            lv_type_6_0=rulePropertyRef();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              								if (current==null) {
                              									current = createModelElementForParent(grammarAccess.getValDeclarationRule());
                              								}
                              								set(
                              									current,
                              									"type",
                              									lv_type_6_0,
                              									"org.osate.alisa.common.Common.PropertyRef");
                              								afterParserOrEnumRuleCall();
                              							
                            }

                            }


                            }


                            }


                            }
                            break;
                        case 3 :
                            // InternalReqSpec.g:5361:5: ( ( (lv_range_7_0= '[' ) ) ( ( (lv_type_8_0= ruleTypeRef ) ) | (otherlv_9= 'typeof' ( (lv_type_10_0= rulePropertyRef ) ) ) ) otherlv_11= ']' )
                            {
                            // InternalReqSpec.g:5361:5: ( ( (lv_range_7_0= '[' ) ) ( ( (lv_type_8_0= ruleTypeRef ) ) | (otherlv_9= 'typeof' ( (lv_type_10_0= rulePropertyRef ) ) ) ) otherlv_11= ']' )
                            // InternalReqSpec.g:5362:6: ( (lv_range_7_0= '[' ) ) ( ( (lv_type_8_0= ruleTypeRef ) ) | (otherlv_9= 'typeof' ( (lv_type_10_0= rulePropertyRef ) ) ) ) otherlv_11= ']'
                            {
                            // InternalReqSpec.g:5362:6: ( (lv_range_7_0= '[' ) )
                            // InternalReqSpec.g:5363:7: (lv_range_7_0= '[' )
                            {
                            // InternalReqSpec.g:5363:7: (lv_range_7_0= '[' )
                            // InternalReqSpec.g:5364:8: lv_range_7_0= '['
                            {
                            lv_range_7_0=(Token)match(input,18,FollowSets000.FOLLOW_71); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              								newLeafNode(lv_range_7_0, grammarAccess.getValDeclarationAccess().getRangeLeftSquareBracketKeyword_3_1_2_0_0());
                              							
                            }
                            if ( state.backtracking==0 ) {

                              								if (current==null) {
                              									current = createModelElement(grammarAccess.getValDeclarationRule());
                              								}
                              								setWithLastConsumed(current, "range", true, "[");
                              							
                            }

                            }


                            }

                            // InternalReqSpec.g:5376:6: ( ( (lv_type_8_0= ruleTypeRef ) ) | (otherlv_9= 'typeof' ( (lv_type_10_0= rulePropertyRef ) ) ) )
                            int alt126=2;
                            int LA126_0 = input.LA(1);

                            if ( (LA126_0==RULE_ID||(LA126_0>=73 && LA126_0<=74)||(LA126_0>=76 && LA126_0<=78)) ) {
                                alt126=1;
                            }
                            else if ( (LA126_0==61) ) {
                                alt126=2;
                            }
                            else {
                                if (state.backtracking>0) {state.failed=true; return current;}
                                NoViableAltException nvae =
                                    new NoViableAltException("", 126, 0, input);

                                throw nvae;
                            }
                            switch (alt126) {
                                case 1 :
                                    // InternalReqSpec.g:5377:7: ( (lv_type_8_0= ruleTypeRef ) )
                                    {
                                    // InternalReqSpec.g:5377:7: ( (lv_type_8_0= ruleTypeRef ) )
                                    // InternalReqSpec.g:5378:8: (lv_type_8_0= ruleTypeRef )
                                    {
                                    // InternalReqSpec.g:5378:8: (lv_type_8_0= ruleTypeRef )
                                    // InternalReqSpec.g:5379:9: lv_type_8_0= ruleTypeRef
                                    {
                                    if ( state.backtracking==0 ) {

                                      									newCompositeNode(grammarAccess.getValDeclarationAccess().getTypeTypeRefParserRuleCall_3_1_2_1_0_0());
                                      								
                                    }
                                    pushFollow(FollowSets000.FOLLOW_72);
                                    lv_type_8_0=ruleTypeRef();

                                    state._fsp--;
                                    if (state.failed) return current;
                                    if ( state.backtracking==0 ) {

                                      									if (current==null) {
                                      										current = createModelElementForParent(grammarAccess.getValDeclarationRule());
                                      									}
                                      									set(
                                      										current,
                                      										"type",
                                      										lv_type_8_0,
                                      										"org.osate.alisa.common.Common.TypeRef");
                                      									afterParserOrEnumRuleCall();
                                      								
                                    }

                                    }


                                    }


                                    }
                                    break;
                                case 2 :
                                    // InternalReqSpec.g:5397:7: (otherlv_9= 'typeof' ( (lv_type_10_0= rulePropertyRef ) ) )
                                    {
                                    // InternalReqSpec.g:5397:7: (otherlv_9= 'typeof' ( (lv_type_10_0= rulePropertyRef ) ) )
                                    // InternalReqSpec.g:5398:8: otherlv_9= 'typeof' ( (lv_type_10_0= rulePropertyRef ) )
                                    {
                                    otherlv_9=(Token)match(input,61,FollowSets000.FOLLOW_70); if (state.failed) return current;
                                    if ( state.backtracking==0 ) {

                                      								newLeafNode(otherlv_9, grammarAccess.getValDeclarationAccess().getTypeofKeyword_3_1_2_1_1_0());
                                      							
                                    }
                                    // InternalReqSpec.g:5402:8: ( (lv_type_10_0= rulePropertyRef ) )
                                    // InternalReqSpec.g:5403:9: (lv_type_10_0= rulePropertyRef )
                                    {
                                    // InternalReqSpec.g:5403:9: (lv_type_10_0= rulePropertyRef )
                                    // InternalReqSpec.g:5404:10: lv_type_10_0= rulePropertyRef
                                    {
                                    if ( state.backtracking==0 ) {

                                      										newCompositeNode(grammarAccess.getValDeclarationAccess().getTypePropertyRefParserRuleCall_3_1_2_1_1_1_0());
                                      									
                                    }
                                    pushFollow(FollowSets000.FOLLOW_72);
                                    lv_type_10_0=rulePropertyRef();

                                    state._fsp--;
                                    if (state.failed) return current;
                                    if ( state.backtracking==0 ) {

                                      										if (current==null) {
                                      											current = createModelElementForParent(grammarAccess.getValDeclarationRule());
                                      										}
                                      										set(
                                      											current,
                                      											"type",
                                      											lv_type_10_0,
                                      											"org.osate.alisa.common.Common.PropertyRef");
                                      										afterParserOrEnumRuleCall();
                                      									
                                    }

                                    }


                                    }


                                    }


                                    }
                                    break;

                            }

                            otherlv_11=(Token)match(input,19,FollowSets000.FOLLOW_69); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              						newLeafNode(otherlv_11, grammarAccess.getValDeclarationAccess().getRightSquareBracketKeyword_3_1_2_2());
                              					
                            }

                            }


                            }
                            break;

                    }


                    }
                    break;

            }

            otherlv_12=(Token)match(input,62,FollowSets000.FOLLOW_62); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_12, grammarAccess.getValDeclarationAccess().getEqualsSignKeyword_4());
              		
            }
            // InternalReqSpec.g:5434:3: ( (lv_value_13_0= ruleAExpression ) )
            // InternalReqSpec.g:5435:4: (lv_value_13_0= ruleAExpression )
            {
            // InternalReqSpec.g:5435:4: (lv_value_13_0= ruleAExpression )
            // InternalReqSpec.g:5436:5: lv_value_13_0= ruleAExpression
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getValDeclarationAccess().getValueAExpressionParserRuleCall_5_0());
              				
            }
            pushFollow(FollowSets000.FOLLOW_73);
            lv_value_13_0=ruleAExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getValDeclarationRule());
              					}
              					set(
              						current,
              						"value",
              						lv_value_13_0,
              						"org.osate.alisa.common.Common.AExpression");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalReqSpec.g:5453:3: (otherlv_14= 'as' ( (lv_property_15_0= rulePropertyRef ) ) )?
            int alt129=2;
            int LA129_0 = input.LA(1);

            if ( (LA129_0==63) ) {
                alt129=1;
            }
            switch (alt129) {
                case 1 :
                    // InternalReqSpec.g:5454:4: otherlv_14= 'as' ( (lv_property_15_0= rulePropertyRef ) )
                    {
                    otherlv_14=(Token)match(input,63,FollowSets000.FOLLOW_70); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_14, grammarAccess.getValDeclarationAccess().getAsKeyword_6_0());
                      			
                    }
                    // InternalReqSpec.g:5458:4: ( (lv_property_15_0= rulePropertyRef ) )
                    // InternalReqSpec.g:5459:5: (lv_property_15_0= rulePropertyRef )
                    {
                    // InternalReqSpec.g:5459:5: (lv_property_15_0= rulePropertyRef )
                    // InternalReqSpec.g:5460:6: lv_property_15_0= rulePropertyRef
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getValDeclarationAccess().getPropertyPropertyRefParserRuleCall_6_1_0());
                      					
                    }
                    pushFollow(FollowSets000.FOLLOW_2);
                    lv_property_15_0=rulePropertyRef();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getValDeclarationRule());
                      						}
                      						set(
                      							current,
                      							"property",
                      							lv_property_15_0,
                      							"org.osate.alisa.common.Common.PropertyRef");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleValDeclaration"


    // $ANTLR start "entryRuleDOCPATH"
    // InternalReqSpec.g:5482:1: entryRuleDOCPATH returns [String current=null] : iv_ruleDOCPATH= ruleDOCPATH EOF ;
    public final String entryRuleDOCPATH() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleDOCPATH = null;


        try {
            // InternalReqSpec.g:5482:47: (iv_ruleDOCPATH= ruleDOCPATH EOF )
            // InternalReqSpec.g:5483:2: iv_ruleDOCPATH= ruleDOCPATH EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getDOCPATHRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleDOCPATH=ruleDOCPATH();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleDOCPATH.getText(); 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDOCPATH"


    // $ANTLR start "ruleDOCPATH"
    // InternalReqSpec.g:5489:1: ruleDOCPATH returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : ( (this_ID_0= RULE_ID kw= '/' )* this_ID_2= RULE_ID kw= '.' this_ID_4= RULE_ID ) ;
    public final AntlrDatatypeRuleToken ruleDOCPATH() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token this_ID_0=null;
        Token kw=null;
        Token this_ID_2=null;
        Token this_ID_4=null;


        	enterRule();

        try {
            // InternalReqSpec.g:5495:2: ( ( (this_ID_0= RULE_ID kw= '/' )* this_ID_2= RULE_ID kw= '.' this_ID_4= RULE_ID ) )
            // InternalReqSpec.g:5496:2: ( (this_ID_0= RULE_ID kw= '/' )* this_ID_2= RULE_ID kw= '.' this_ID_4= RULE_ID )
            {
            // InternalReqSpec.g:5496:2: ( (this_ID_0= RULE_ID kw= '/' )* this_ID_2= RULE_ID kw= '.' this_ID_4= RULE_ID )
            // InternalReqSpec.g:5497:3: (this_ID_0= RULE_ID kw= '/' )* this_ID_2= RULE_ID kw= '.' this_ID_4= RULE_ID
            {
            // InternalReqSpec.g:5497:3: (this_ID_0= RULE_ID kw= '/' )*
            loop130:
            do {
                int alt130=2;
                int LA130_0 = input.LA(1);

                if ( (LA130_0==RULE_ID) ) {
                    int LA130_1 = input.LA(2);

                    if ( (LA130_1==64) ) {
                        alt130=1;
                    }


                }


                switch (alt130) {
            	case 1 :
            	    // InternalReqSpec.g:5498:4: this_ID_0= RULE_ID kw= '/'
            	    {
            	    this_ID_0=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_74); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				current.merge(this_ID_0);
            	      			
            	    }
            	    if ( state.backtracking==0 ) {

            	      				newLeafNode(this_ID_0, grammarAccess.getDOCPATHAccess().getIDTerminalRuleCall_0_0());
            	      			
            	    }
            	    kw=(Token)match(input,64,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				current.merge(kw);
            	      				newLeafNode(kw, grammarAccess.getDOCPATHAccess().getSolidusKeyword_0_1());
            	      			
            	    }

            	    }
            	    break;

            	default :
            	    break loop130;
                }
            } while (true);

            this_ID_2=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_75); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current.merge(this_ID_2);
              		
            }
            if ( state.backtracking==0 ) {

              			newLeafNode(this_ID_2, grammarAccess.getDOCPATHAccess().getIDTerminalRuleCall_1());
              		
            }
            kw=(Token)match(input,65,FollowSets000.FOLLOW_4); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current.merge(kw);
              			newLeafNode(kw, grammarAccess.getDOCPATHAccess().getFullStopKeyword_2());
              		
            }
            this_ID_4=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current.merge(this_ID_4);
              		
            }
            if ( state.backtracking==0 ) {

              			newLeafNode(this_ID_4, grammarAccess.getDOCPATHAccess().getIDTerminalRuleCall_3());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDOCPATH"


    // $ANTLR start "entryRuleDescription"
    // InternalReqSpec.g:5534:1: entryRuleDescription returns [EObject current=null] : iv_ruleDescription= ruleDescription EOF ;
    public final EObject entryRuleDescription() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDescription = null;


        try {
            // InternalReqSpec.g:5534:52: (iv_ruleDescription= ruleDescription EOF )
            // InternalReqSpec.g:5535:2: iv_ruleDescription= ruleDescription EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getDescriptionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleDescription=ruleDescription();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleDescription; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDescription"


    // $ANTLR start "ruleDescription"
    // InternalReqSpec.g:5541:1: ruleDescription returns [EObject current=null] : (otherlv_0= 'description' ( (lv_description_1_0= ruleDescriptionElement ) )+ ) ;
    public final EObject ruleDescription() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        EObject lv_description_1_0 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:5547:2: ( (otherlv_0= 'description' ( (lv_description_1_0= ruleDescriptionElement ) )+ ) )
            // InternalReqSpec.g:5548:2: (otherlv_0= 'description' ( (lv_description_1_0= ruleDescriptionElement ) )+ )
            {
            // InternalReqSpec.g:5548:2: (otherlv_0= 'description' ( (lv_description_1_0= ruleDescriptionElement ) )+ )
            // InternalReqSpec.g:5549:3: otherlv_0= 'description' ( (lv_description_1_0= ruleDescriptionElement ) )+
            {
            otherlv_0=(Token)match(input,66,FollowSets000.FOLLOW_76); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getDescriptionAccess().getDescriptionKeyword_0());
              		
            }
            // InternalReqSpec.g:5553:3: ( (lv_description_1_0= ruleDescriptionElement ) )+
            int cnt131=0;
            loop131:
            do {
                int alt131=2;
                int LA131_0 = input.LA(1);

                if ( ((LA131_0>=RULE_STRING && LA131_0<=RULE_ID)||LA131_0==67||LA131_0==82) ) {
                    alt131=1;
                }


                switch (alt131) {
            	case 1 :
            	    // InternalReqSpec.g:5554:4: (lv_description_1_0= ruleDescriptionElement )
            	    {
            	    // InternalReqSpec.g:5554:4: (lv_description_1_0= ruleDescriptionElement )
            	    // InternalReqSpec.g:5555:5: lv_description_1_0= ruleDescriptionElement
            	    {
            	    if ( state.backtracking==0 ) {

            	      					newCompositeNode(grammarAccess.getDescriptionAccess().getDescriptionDescriptionElementParserRuleCall_1_0());
            	      				
            	    }
            	    pushFollow(FollowSets000.FOLLOW_77);
            	    lv_description_1_0=ruleDescriptionElement();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					if (current==null) {
            	      						current = createModelElementForParent(grammarAccess.getDescriptionRule());
            	      					}
            	      					add(
            	      						current,
            	      						"description",
            	      						lv_description_1_0,
            	      						"org.osate.alisa.common.Common.DescriptionElement");
            	      					afterParserOrEnumRuleCall();
            	      				
            	    }

            	    }


            	    }
            	    break;

            	default :
            	    if ( cnt131 >= 1 ) break loop131;
            	    if (state.backtracking>0) {state.failed=true; return current;}
                        EarlyExitException eee =
                            new EarlyExitException(131, input);
                        throw eee;
                }
                cnt131++;
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDescription"


    // $ANTLR start "entryRuleDescriptionElement"
    // InternalReqSpec.g:5576:1: entryRuleDescriptionElement returns [EObject current=null] : iv_ruleDescriptionElement= ruleDescriptionElement EOF ;
    public final EObject entryRuleDescriptionElement() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDescriptionElement = null;


        try {
            // InternalReqSpec.g:5576:59: (iv_ruleDescriptionElement= ruleDescriptionElement EOF )
            // InternalReqSpec.g:5577:2: iv_ruleDescriptionElement= ruleDescriptionElement EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getDescriptionElementRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleDescriptionElement=ruleDescriptionElement();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleDescriptionElement; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDescriptionElement"


    // $ANTLR start "ruleDescriptionElement"
    // InternalReqSpec.g:5583:1: ruleDescriptionElement returns [EObject current=null] : ( ( (lv_text_0_0= RULE_STRING ) ) | ( ( ( 'this' ) )=> (lv_thisTarget_1_0= 'this' ) ) | ( ( ( ruleImageReference ) )=> (lv_image_2_0= ruleImageReference ) ) | ( (lv_showValue_3_0= ruleShowValue ) ) ) ;
    public final EObject ruleDescriptionElement() throws RecognitionException {
        EObject current = null;

        Token lv_text_0_0=null;
        Token lv_thisTarget_1_0=null;
        EObject lv_image_2_0 = null;

        EObject lv_showValue_3_0 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:5589:2: ( ( ( (lv_text_0_0= RULE_STRING ) ) | ( ( ( 'this' ) )=> (lv_thisTarget_1_0= 'this' ) ) | ( ( ( ruleImageReference ) )=> (lv_image_2_0= ruleImageReference ) ) | ( (lv_showValue_3_0= ruleShowValue ) ) ) )
            // InternalReqSpec.g:5590:2: ( ( (lv_text_0_0= RULE_STRING ) ) | ( ( ( 'this' ) )=> (lv_thisTarget_1_0= 'this' ) ) | ( ( ( ruleImageReference ) )=> (lv_image_2_0= ruleImageReference ) ) | ( (lv_showValue_3_0= ruleShowValue ) ) )
            {
            // InternalReqSpec.g:5590:2: ( ( (lv_text_0_0= RULE_STRING ) ) | ( ( ( 'this' ) )=> (lv_thisTarget_1_0= 'this' ) ) | ( ( ( ruleImageReference ) )=> (lv_image_2_0= ruleImageReference ) ) | ( (lv_showValue_3_0= ruleShowValue ) ) )
            int alt132=4;
            int LA132_0 = input.LA(1);

            if ( (LA132_0==RULE_STRING) ) {
                alt132=1;
            }
            else if ( (LA132_0==67) && (synpred1_InternalReqSpec())) {
                alt132=2;
            }
            else if ( (LA132_0==82) && (synpred2_InternalReqSpec())) {
                alt132=3;
            }
            else if ( (LA132_0==RULE_ID) ) {
                alt132=4;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 132, 0, input);

                throw nvae;
            }
            switch (alt132) {
                case 1 :
                    // InternalReqSpec.g:5591:3: ( (lv_text_0_0= RULE_STRING ) )
                    {
                    // InternalReqSpec.g:5591:3: ( (lv_text_0_0= RULE_STRING ) )
                    // InternalReqSpec.g:5592:4: (lv_text_0_0= RULE_STRING )
                    {
                    // InternalReqSpec.g:5592:4: (lv_text_0_0= RULE_STRING )
                    // InternalReqSpec.g:5593:5: lv_text_0_0= RULE_STRING
                    {
                    lv_text_0_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(lv_text_0_0, grammarAccess.getDescriptionElementAccess().getTextSTRINGTerminalRuleCall_0_0());
                      				
                    }
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElement(grammarAccess.getDescriptionElementRule());
                      					}
                      					setWithLastConsumed(
                      						current,
                      						"text",
                      						lv_text_0_0,
                      						"org.eclipse.xtext.common.Terminals.STRING");
                      				
                    }

                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalReqSpec.g:5610:3: ( ( ( 'this' ) )=> (lv_thisTarget_1_0= 'this' ) )
                    {
                    // InternalReqSpec.g:5610:3: ( ( ( 'this' ) )=> (lv_thisTarget_1_0= 'this' ) )
                    // InternalReqSpec.g:5611:4: ( ( 'this' ) )=> (lv_thisTarget_1_0= 'this' )
                    {
                    // InternalReqSpec.g:5615:4: (lv_thisTarget_1_0= 'this' )
                    // InternalReqSpec.g:5616:5: lv_thisTarget_1_0= 'this'
                    {
                    lv_thisTarget_1_0=(Token)match(input,67,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(lv_thisTarget_1_0, grammarAccess.getDescriptionElementAccess().getThisTargetThisKeyword_1_0());
                      				
                    }
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElement(grammarAccess.getDescriptionElementRule());
                      					}
                      					setWithLastConsumed(current, "thisTarget", true, "this");
                      				
                    }

                    }


                    }


                    }
                    break;
                case 3 :
                    // InternalReqSpec.g:5629:3: ( ( ( ruleImageReference ) )=> (lv_image_2_0= ruleImageReference ) )
                    {
                    // InternalReqSpec.g:5629:3: ( ( ( ruleImageReference ) )=> (lv_image_2_0= ruleImageReference ) )
                    // InternalReqSpec.g:5630:4: ( ( ruleImageReference ) )=> (lv_image_2_0= ruleImageReference )
                    {
                    // InternalReqSpec.g:5634:4: (lv_image_2_0= ruleImageReference )
                    // InternalReqSpec.g:5635:5: lv_image_2_0= ruleImageReference
                    {
                    if ( state.backtracking==0 ) {

                      					newCompositeNode(grammarAccess.getDescriptionElementAccess().getImageImageReferenceParserRuleCall_2_0());
                      				
                    }
                    pushFollow(FollowSets000.FOLLOW_2);
                    lv_image_2_0=ruleImageReference();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElementForParent(grammarAccess.getDescriptionElementRule());
                      					}
                      					set(
                      						current,
                      						"image",
                      						lv_image_2_0,
                      						"org.osate.alisa.common.Common.ImageReference");
                      					afterParserOrEnumRuleCall();
                      				
                    }

                    }


                    }


                    }
                    break;
                case 4 :
                    // InternalReqSpec.g:5653:3: ( (lv_showValue_3_0= ruleShowValue ) )
                    {
                    // InternalReqSpec.g:5653:3: ( (lv_showValue_3_0= ruleShowValue ) )
                    // InternalReqSpec.g:5654:4: (lv_showValue_3_0= ruleShowValue )
                    {
                    // InternalReqSpec.g:5654:4: (lv_showValue_3_0= ruleShowValue )
                    // InternalReqSpec.g:5655:5: lv_showValue_3_0= ruleShowValue
                    {
                    if ( state.backtracking==0 ) {

                      					newCompositeNode(grammarAccess.getDescriptionElementAccess().getShowValueShowValueParserRuleCall_3_0());
                      				
                    }
                    pushFollow(FollowSets000.FOLLOW_2);
                    lv_showValue_3_0=ruleShowValue();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElementForParent(grammarAccess.getDescriptionElementRule());
                      					}
                      					set(
                      						current,
                      						"showValue",
                      						lv_showValue_3_0,
                      						"org.osate.alisa.common.Common.ShowValue");
                      					afterParserOrEnumRuleCall();
                      				
                    }

                    }


                    }


                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDescriptionElement"


    // $ANTLR start "entryRuleRationale"
    // InternalReqSpec.g:5676:1: entryRuleRationale returns [EObject current=null] : iv_ruleRationale= ruleRationale EOF ;
    public final EObject entryRuleRationale() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleRationale = null;


        try {
            // InternalReqSpec.g:5676:50: (iv_ruleRationale= ruleRationale EOF )
            // InternalReqSpec.g:5677:2: iv_ruleRationale= ruleRationale EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getRationaleRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleRationale=ruleRationale();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleRationale; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleRationale"


    // $ANTLR start "ruleRationale"
    // InternalReqSpec.g:5683:1: ruleRationale returns [EObject current=null] : (otherlv_0= 'rationale' ( (lv_description_1_0= ruleDescriptionElement ) )+ ) ;
    public final EObject ruleRationale() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        EObject lv_description_1_0 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:5689:2: ( (otherlv_0= 'rationale' ( (lv_description_1_0= ruleDescriptionElement ) )+ ) )
            // InternalReqSpec.g:5690:2: (otherlv_0= 'rationale' ( (lv_description_1_0= ruleDescriptionElement ) )+ )
            {
            // InternalReqSpec.g:5690:2: (otherlv_0= 'rationale' ( (lv_description_1_0= ruleDescriptionElement ) )+ )
            // InternalReqSpec.g:5691:3: otherlv_0= 'rationale' ( (lv_description_1_0= ruleDescriptionElement ) )+
            {
            otherlv_0=(Token)match(input,68,FollowSets000.FOLLOW_76); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getRationaleAccess().getRationaleKeyword_0());
              		
            }
            // InternalReqSpec.g:5695:3: ( (lv_description_1_0= ruleDescriptionElement ) )+
            int cnt133=0;
            loop133:
            do {
                int alt133=2;
                int LA133_0 = input.LA(1);

                if ( ((LA133_0>=RULE_STRING && LA133_0<=RULE_ID)||LA133_0==67||LA133_0==82) ) {
                    alt133=1;
                }


                switch (alt133) {
            	case 1 :
            	    // InternalReqSpec.g:5696:4: (lv_description_1_0= ruleDescriptionElement )
            	    {
            	    // InternalReqSpec.g:5696:4: (lv_description_1_0= ruleDescriptionElement )
            	    // InternalReqSpec.g:5697:5: lv_description_1_0= ruleDescriptionElement
            	    {
            	    if ( state.backtracking==0 ) {

            	      					newCompositeNode(grammarAccess.getRationaleAccess().getDescriptionDescriptionElementParserRuleCall_1_0());
            	      				
            	    }
            	    pushFollow(FollowSets000.FOLLOW_77);
            	    lv_description_1_0=ruleDescriptionElement();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					if (current==null) {
            	      						current = createModelElementForParent(grammarAccess.getRationaleRule());
            	      					}
            	      					add(
            	      						current,
            	      						"description",
            	      						lv_description_1_0,
            	      						"org.osate.alisa.common.Common.DescriptionElement");
            	      					afterParserOrEnumRuleCall();
            	      				
            	    }

            	    }


            	    }
            	    break;

            	default :
            	    if ( cnt133 >= 1 ) break loop133;
            	    if (state.backtracking>0) {state.failed=true; return current;}
                        EarlyExitException eee =
                            new EarlyExitException(133, input);
                        throw eee;
                }
                cnt133++;
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleRationale"


    // $ANTLR start "entryRuleUncertainty"
    // InternalReqSpec.g:5718:1: entryRuleUncertainty returns [EObject current=null] : iv_ruleUncertainty= ruleUncertainty EOF ;
    public final EObject entryRuleUncertainty() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleUncertainty = null;


        try {
            // InternalReqSpec.g:5718:52: (iv_ruleUncertainty= ruleUncertainty EOF )
            // InternalReqSpec.g:5719:2: iv_ruleUncertainty= ruleUncertainty EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getUncertaintyRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleUncertainty=ruleUncertainty();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleUncertainty; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleUncertainty"


    // $ANTLR start "ruleUncertainty"
    // InternalReqSpec.g:5725:1: ruleUncertainty returns [EObject current=null] : ( () otherlv_1= 'uncertainty' otherlv_2= '[' ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'volatility' ( (lv_volatility_5_0= RULE_INT ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_6= 'precedence' ( (lv_precedence_7_0= RULE_INT ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_8= 'impact' ( (lv_impact_9_0= RULE_INT ) ) ) ) ) ) )* ) ) ) otherlv_10= ']' ) ;
    public final EObject ruleUncertainty() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token lv_volatility_5_0=null;
        Token otherlv_6=null;
        Token lv_precedence_7_0=null;
        Token otherlv_8=null;
        Token lv_impact_9_0=null;
        Token otherlv_10=null;


        	enterRule();

        try {
            // InternalReqSpec.g:5731:2: ( ( () otherlv_1= 'uncertainty' otherlv_2= '[' ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'volatility' ( (lv_volatility_5_0= RULE_INT ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_6= 'precedence' ( (lv_precedence_7_0= RULE_INT ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_8= 'impact' ( (lv_impact_9_0= RULE_INT ) ) ) ) ) ) )* ) ) ) otherlv_10= ']' ) )
            // InternalReqSpec.g:5732:2: ( () otherlv_1= 'uncertainty' otherlv_2= '[' ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'volatility' ( (lv_volatility_5_0= RULE_INT ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_6= 'precedence' ( (lv_precedence_7_0= RULE_INT ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_8= 'impact' ( (lv_impact_9_0= RULE_INT ) ) ) ) ) ) )* ) ) ) otherlv_10= ']' )
            {
            // InternalReqSpec.g:5732:2: ( () otherlv_1= 'uncertainty' otherlv_2= '[' ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'volatility' ( (lv_volatility_5_0= RULE_INT ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_6= 'precedence' ( (lv_precedence_7_0= RULE_INT ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_8= 'impact' ( (lv_impact_9_0= RULE_INT ) ) ) ) ) ) )* ) ) ) otherlv_10= ']' )
            // InternalReqSpec.g:5733:3: () otherlv_1= 'uncertainty' otherlv_2= '[' ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'volatility' ( (lv_volatility_5_0= RULE_INT ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_6= 'precedence' ( (lv_precedence_7_0= RULE_INT ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_8= 'impact' ( (lv_impact_9_0= RULE_INT ) ) ) ) ) ) )* ) ) ) otherlv_10= ']'
            {
            // InternalReqSpec.g:5733:3: ()
            // InternalReqSpec.g:5734:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getUncertaintyAccess().getUncertaintyAction_0(),
              					current);
              			
            }

            }

            otherlv_1=(Token)match(input,69,FollowSets000.FOLLOW_5); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getUncertaintyAccess().getUncertaintyKeyword_1());
              		
            }
            otherlv_2=(Token)match(input,18,FollowSets000.FOLLOW_78); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_2, grammarAccess.getUncertaintyAccess().getLeftSquareBracketKeyword_2());
              		
            }
            // InternalReqSpec.g:5748:3: ( ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'volatility' ( (lv_volatility_5_0= RULE_INT ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_6= 'precedence' ( (lv_precedence_7_0= RULE_INT ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_8= 'impact' ( (lv_impact_9_0= RULE_INT ) ) ) ) ) ) )* ) ) )
            // InternalReqSpec.g:5749:4: ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'volatility' ( (lv_volatility_5_0= RULE_INT ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_6= 'precedence' ( (lv_precedence_7_0= RULE_INT ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_8= 'impact' ( (lv_impact_9_0= RULE_INT ) ) ) ) ) ) )* ) )
            {
            // InternalReqSpec.g:5749:4: ( ( ( ({...}? => ( ({...}? => (otherlv_4= 'volatility' ( (lv_volatility_5_0= RULE_INT ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_6= 'precedence' ( (lv_precedence_7_0= RULE_INT ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_8= 'impact' ( (lv_impact_9_0= RULE_INT ) ) ) ) ) ) )* ) )
            // InternalReqSpec.g:5750:5: ( ( ({...}? => ( ({...}? => (otherlv_4= 'volatility' ( (lv_volatility_5_0= RULE_INT ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_6= 'precedence' ( (lv_precedence_7_0= RULE_INT ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_8= 'impact' ( (lv_impact_9_0= RULE_INT ) ) ) ) ) ) )* )
            {
            getUnorderedGroupHelper().enter(grammarAccess.getUncertaintyAccess().getUnorderedGroup_3());
            // InternalReqSpec.g:5753:5: ( ( ({...}? => ( ({...}? => (otherlv_4= 'volatility' ( (lv_volatility_5_0= RULE_INT ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_6= 'precedence' ( (lv_precedence_7_0= RULE_INT ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_8= 'impact' ( (lv_impact_9_0= RULE_INT ) ) ) ) ) ) )* )
            // InternalReqSpec.g:5754:6: ( ({...}? => ( ({...}? => (otherlv_4= 'volatility' ( (lv_volatility_5_0= RULE_INT ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_6= 'precedence' ( (lv_precedence_7_0= RULE_INT ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_8= 'impact' ( (lv_impact_9_0= RULE_INT ) ) ) ) ) ) )*
            {
            // InternalReqSpec.g:5754:6: ( ({...}? => ( ({...}? => (otherlv_4= 'volatility' ( (lv_volatility_5_0= RULE_INT ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_6= 'precedence' ( (lv_precedence_7_0= RULE_INT ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_8= 'impact' ( (lv_impact_9_0= RULE_INT ) ) ) ) ) ) )*
            loop134:
            do {
                int alt134=4;
                int LA134_0 = input.LA(1);

                if ( LA134_0 == 70 && getUnorderedGroupHelper().canSelect(grammarAccess.getUncertaintyAccess().getUnorderedGroup_3(), 0) ) {
                    alt134=1;
                }
                else if ( LA134_0 == 71 && getUnorderedGroupHelper().canSelect(grammarAccess.getUncertaintyAccess().getUnorderedGroup_3(), 1) ) {
                    alt134=2;
                }
                else if ( LA134_0 == 72 && getUnorderedGroupHelper().canSelect(grammarAccess.getUncertaintyAccess().getUnorderedGroup_3(), 2) ) {
                    alt134=3;
                }


                switch (alt134) {
            	case 1 :
            	    // InternalReqSpec.g:5755:4: ({...}? => ( ({...}? => (otherlv_4= 'volatility' ( (lv_volatility_5_0= RULE_INT ) ) ) ) ) )
            	    {
            	    // InternalReqSpec.g:5755:4: ({...}? => ( ({...}? => (otherlv_4= 'volatility' ( (lv_volatility_5_0= RULE_INT ) ) ) ) ) )
            	    // InternalReqSpec.g:5756:5: {...}? => ( ({...}? => (otherlv_4= 'volatility' ( (lv_volatility_5_0= RULE_INT ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getUncertaintyAccess().getUnorderedGroup_3(), 0) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleUncertainty", "getUnorderedGroupHelper().canSelect(grammarAccess.getUncertaintyAccess().getUnorderedGroup_3(), 0)");
            	    }
            	    // InternalReqSpec.g:5756:108: ( ({...}? => (otherlv_4= 'volatility' ( (lv_volatility_5_0= RULE_INT ) ) ) ) )
            	    // InternalReqSpec.g:5757:6: ({...}? => (otherlv_4= 'volatility' ( (lv_volatility_5_0= RULE_INT ) ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getUncertaintyAccess().getUnorderedGroup_3(), 0);
            	    // InternalReqSpec.g:5760:9: ({...}? => (otherlv_4= 'volatility' ( (lv_volatility_5_0= RULE_INT ) ) ) )
            	    // InternalReqSpec.g:5760:10: {...}? => (otherlv_4= 'volatility' ( (lv_volatility_5_0= RULE_INT ) ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleUncertainty", "true");
            	    }
            	    // InternalReqSpec.g:5760:19: (otherlv_4= 'volatility' ( (lv_volatility_5_0= RULE_INT ) ) )
            	    // InternalReqSpec.g:5760:20: otherlv_4= 'volatility' ( (lv_volatility_5_0= RULE_INT ) )
            	    {
            	    otherlv_4=(Token)match(input,70,FollowSets000.FOLLOW_79); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_4, grammarAccess.getUncertaintyAccess().getVolatilityKeyword_3_0_0());
            	      								
            	    }
            	    // InternalReqSpec.g:5764:9: ( (lv_volatility_5_0= RULE_INT ) )
            	    // InternalReqSpec.g:5765:10: (lv_volatility_5_0= RULE_INT )
            	    {
            	    // InternalReqSpec.g:5765:10: (lv_volatility_5_0= RULE_INT )
            	    // InternalReqSpec.g:5766:11: lv_volatility_5_0= RULE_INT
            	    {
            	    lv_volatility_5_0=(Token)match(input,RULE_INT,FollowSets000.FOLLOW_78); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      											newLeafNode(lv_volatility_5_0, grammarAccess.getUncertaintyAccess().getVolatilityINTTerminalRuleCall_3_0_1_0());
            	      										
            	    }
            	    if ( state.backtracking==0 ) {

            	      											if (current==null) {
            	      												current = createModelElement(grammarAccess.getUncertaintyRule());
            	      											}
            	      											setWithLastConsumed(
            	      												current,
            	      												"volatility",
            	      												lv_volatility_5_0,
            	      												"org.eclipse.xtext.common.Terminals.INT");
            	      										
            	    }

            	    }


            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getUncertaintyAccess().getUnorderedGroup_3());

            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // InternalReqSpec.g:5788:4: ({...}? => ( ({...}? => (otherlv_6= 'precedence' ( (lv_precedence_7_0= RULE_INT ) ) ) ) ) )
            	    {
            	    // InternalReqSpec.g:5788:4: ({...}? => ( ({...}? => (otherlv_6= 'precedence' ( (lv_precedence_7_0= RULE_INT ) ) ) ) ) )
            	    // InternalReqSpec.g:5789:5: {...}? => ( ({...}? => (otherlv_6= 'precedence' ( (lv_precedence_7_0= RULE_INT ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getUncertaintyAccess().getUnorderedGroup_3(), 1) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleUncertainty", "getUnorderedGroupHelper().canSelect(grammarAccess.getUncertaintyAccess().getUnorderedGroup_3(), 1)");
            	    }
            	    // InternalReqSpec.g:5789:108: ( ({...}? => (otherlv_6= 'precedence' ( (lv_precedence_7_0= RULE_INT ) ) ) ) )
            	    // InternalReqSpec.g:5790:6: ({...}? => (otherlv_6= 'precedence' ( (lv_precedence_7_0= RULE_INT ) ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getUncertaintyAccess().getUnorderedGroup_3(), 1);
            	    // InternalReqSpec.g:5793:9: ({...}? => (otherlv_6= 'precedence' ( (lv_precedence_7_0= RULE_INT ) ) ) )
            	    // InternalReqSpec.g:5793:10: {...}? => (otherlv_6= 'precedence' ( (lv_precedence_7_0= RULE_INT ) ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleUncertainty", "true");
            	    }
            	    // InternalReqSpec.g:5793:19: (otherlv_6= 'precedence' ( (lv_precedence_7_0= RULE_INT ) ) )
            	    // InternalReqSpec.g:5793:20: otherlv_6= 'precedence' ( (lv_precedence_7_0= RULE_INT ) )
            	    {
            	    otherlv_6=(Token)match(input,71,FollowSets000.FOLLOW_79); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_6, grammarAccess.getUncertaintyAccess().getPrecedenceKeyword_3_1_0());
            	      								
            	    }
            	    // InternalReqSpec.g:5797:9: ( (lv_precedence_7_0= RULE_INT ) )
            	    // InternalReqSpec.g:5798:10: (lv_precedence_7_0= RULE_INT )
            	    {
            	    // InternalReqSpec.g:5798:10: (lv_precedence_7_0= RULE_INT )
            	    // InternalReqSpec.g:5799:11: lv_precedence_7_0= RULE_INT
            	    {
            	    lv_precedence_7_0=(Token)match(input,RULE_INT,FollowSets000.FOLLOW_78); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      											newLeafNode(lv_precedence_7_0, grammarAccess.getUncertaintyAccess().getPrecedenceINTTerminalRuleCall_3_1_1_0());
            	      										
            	    }
            	    if ( state.backtracking==0 ) {

            	      											if (current==null) {
            	      												current = createModelElement(grammarAccess.getUncertaintyRule());
            	      											}
            	      											setWithLastConsumed(
            	      												current,
            	      												"precedence",
            	      												lv_precedence_7_0,
            	      												"org.eclipse.xtext.common.Terminals.INT");
            	      										
            	    }

            	    }


            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getUncertaintyAccess().getUnorderedGroup_3());

            	    }


            	    }


            	    }
            	    break;
            	case 3 :
            	    // InternalReqSpec.g:5821:4: ({...}? => ( ({...}? => (otherlv_8= 'impact' ( (lv_impact_9_0= RULE_INT ) ) ) ) ) )
            	    {
            	    // InternalReqSpec.g:5821:4: ({...}? => ( ({...}? => (otherlv_8= 'impact' ( (lv_impact_9_0= RULE_INT ) ) ) ) ) )
            	    // InternalReqSpec.g:5822:5: {...}? => ( ({...}? => (otherlv_8= 'impact' ( (lv_impact_9_0= RULE_INT ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getUncertaintyAccess().getUnorderedGroup_3(), 2) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleUncertainty", "getUnorderedGroupHelper().canSelect(grammarAccess.getUncertaintyAccess().getUnorderedGroup_3(), 2)");
            	    }
            	    // InternalReqSpec.g:5822:108: ( ({...}? => (otherlv_8= 'impact' ( (lv_impact_9_0= RULE_INT ) ) ) ) )
            	    // InternalReqSpec.g:5823:6: ({...}? => (otherlv_8= 'impact' ( (lv_impact_9_0= RULE_INT ) ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getUncertaintyAccess().getUnorderedGroup_3(), 2);
            	    // InternalReqSpec.g:5826:9: ({...}? => (otherlv_8= 'impact' ( (lv_impact_9_0= RULE_INT ) ) ) )
            	    // InternalReqSpec.g:5826:10: {...}? => (otherlv_8= 'impact' ( (lv_impact_9_0= RULE_INT ) ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleUncertainty", "true");
            	    }
            	    // InternalReqSpec.g:5826:19: (otherlv_8= 'impact' ( (lv_impact_9_0= RULE_INT ) ) )
            	    // InternalReqSpec.g:5826:20: otherlv_8= 'impact' ( (lv_impact_9_0= RULE_INT ) )
            	    {
            	    otherlv_8=(Token)match(input,72,FollowSets000.FOLLOW_79); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_8, grammarAccess.getUncertaintyAccess().getImpactKeyword_3_2_0());
            	      								
            	    }
            	    // InternalReqSpec.g:5830:9: ( (lv_impact_9_0= RULE_INT ) )
            	    // InternalReqSpec.g:5831:10: (lv_impact_9_0= RULE_INT )
            	    {
            	    // InternalReqSpec.g:5831:10: (lv_impact_9_0= RULE_INT )
            	    // InternalReqSpec.g:5832:11: lv_impact_9_0= RULE_INT
            	    {
            	    lv_impact_9_0=(Token)match(input,RULE_INT,FollowSets000.FOLLOW_78); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      											newLeafNode(lv_impact_9_0, grammarAccess.getUncertaintyAccess().getImpactINTTerminalRuleCall_3_2_1_0());
            	      										
            	    }
            	    if ( state.backtracking==0 ) {

            	      											if (current==null) {
            	      												current = createModelElement(grammarAccess.getUncertaintyRule());
            	      											}
            	      											setWithLastConsumed(
            	      												current,
            	      												"impact",
            	      												lv_impact_9_0,
            	      												"org.eclipse.xtext.common.Terminals.INT");
            	      										
            	    }

            	    }


            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getUncertaintyAccess().getUnorderedGroup_3());

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop134;
                }
            } while (true);


            }


            }

            getUnorderedGroupHelper().leave(grammarAccess.getUncertaintyAccess().getUnorderedGroup_3());

            }

            otherlv_10=(Token)match(input,19,FollowSets000.FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_10, grammarAccess.getUncertaintyAccess().getRightSquareBracketKeyword_4());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleUncertainty"


    // $ANTLR start "entryRuleTypeRef"
    // InternalReqSpec.g:5869:1: entryRuleTypeRef returns [EObject current=null] : iv_ruleTypeRef= ruleTypeRef EOF ;
    public final EObject entryRuleTypeRef() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleTypeRef = null;


        try {
            // InternalReqSpec.g:5869:48: (iv_ruleTypeRef= ruleTypeRef EOF )
            // InternalReqSpec.g:5870:2: iv_ruleTypeRef= ruleTypeRef EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getTypeRefRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleTypeRef=ruleTypeRef();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleTypeRef; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleTypeRef"


    // $ANTLR start "ruleTypeRef"
    // InternalReqSpec.g:5876:1: ruleTypeRef returns [EObject current=null] : ( ( () otherlv_1= 'boolean' ) | ( () otherlv_3= 'integer' (otherlv_4= 'units' ( ( ruleAADLPROPERTYREFERENCE ) ) )? ) | ( () otherlv_7= 'real' (otherlv_8= 'units' ( ( ruleAADLPROPERTYREFERENCE ) ) )? ) | ( () otherlv_11= 'string' ) | ( () otherlv_13= 'model' otherlv_14= 'element' ) | ( () ( ( ruleAADLPROPERTYREFERENCE ) ) ) ) ;
    public final EObject ruleTypeRef() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token otherlv_11=null;
        Token otherlv_13=null;
        Token otherlv_14=null;


        	enterRule();

        try {
            // InternalReqSpec.g:5882:2: ( ( ( () otherlv_1= 'boolean' ) | ( () otherlv_3= 'integer' (otherlv_4= 'units' ( ( ruleAADLPROPERTYREFERENCE ) ) )? ) | ( () otherlv_7= 'real' (otherlv_8= 'units' ( ( ruleAADLPROPERTYREFERENCE ) ) )? ) | ( () otherlv_11= 'string' ) | ( () otherlv_13= 'model' otherlv_14= 'element' ) | ( () ( ( ruleAADLPROPERTYREFERENCE ) ) ) ) )
            // InternalReqSpec.g:5883:2: ( ( () otherlv_1= 'boolean' ) | ( () otherlv_3= 'integer' (otherlv_4= 'units' ( ( ruleAADLPROPERTYREFERENCE ) ) )? ) | ( () otherlv_7= 'real' (otherlv_8= 'units' ( ( ruleAADLPROPERTYREFERENCE ) ) )? ) | ( () otherlv_11= 'string' ) | ( () otherlv_13= 'model' otherlv_14= 'element' ) | ( () ( ( ruleAADLPROPERTYREFERENCE ) ) ) )
            {
            // InternalReqSpec.g:5883:2: ( ( () otherlv_1= 'boolean' ) | ( () otherlv_3= 'integer' (otherlv_4= 'units' ( ( ruleAADLPROPERTYREFERENCE ) ) )? ) | ( () otherlv_7= 'real' (otherlv_8= 'units' ( ( ruleAADLPROPERTYREFERENCE ) ) )? ) | ( () otherlv_11= 'string' ) | ( () otherlv_13= 'model' otherlv_14= 'element' ) | ( () ( ( ruleAADLPROPERTYREFERENCE ) ) ) )
            int alt137=6;
            switch ( input.LA(1) ) {
            case 73:
                {
                alt137=1;
                }
                break;
            case 74:
                {
                alt137=2;
                }
                break;
            case 76:
                {
                alt137=3;
                }
                break;
            case 77:
                {
                alt137=4;
                }
                break;
            case 78:
                {
                alt137=5;
                }
                break;
            case RULE_ID:
                {
                alt137=6;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 137, 0, input);

                throw nvae;
            }

            switch (alt137) {
                case 1 :
                    // InternalReqSpec.g:5884:3: ( () otherlv_1= 'boolean' )
                    {
                    // InternalReqSpec.g:5884:3: ( () otherlv_1= 'boolean' )
                    // InternalReqSpec.g:5885:4: () otherlv_1= 'boolean'
                    {
                    // InternalReqSpec.g:5885:4: ()
                    // InternalReqSpec.g:5886:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElement(
                      						grammarAccess.getTypeRefAccess().getAadlBooleanAction_0_0(),
                      						current);
                      				
                    }

                    }

                    otherlv_1=(Token)match(input,73,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_1, grammarAccess.getTypeRefAccess().getBooleanKeyword_0_1());
                      			
                    }

                    }


                    }
                    break;
                case 2 :
                    // InternalReqSpec.g:5898:3: ( () otherlv_3= 'integer' (otherlv_4= 'units' ( ( ruleAADLPROPERTYREFERENCE ) ) )? )
                    {
                    // InternalReqSpec.g:5898:3: ( () otherlv_3= 'integer' (otherlv_4= 'units' ( ( ruleAADLPROPERTYREFERENCE ) ) )? )
                    // InternalReqSpec.g:5899:4: () otherlv_3= 'integer' (otherlv_4= 'units' ( ( ruleAADLPROPERTYREFERENCE ) ) )?
                    {
                    // InternalReqSpec.g:5899:4: ()
                    // InternalReqSpec.g:5900:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElement(
                      						grammarAccess.getTypeRefAccess().getAadlIntegerAction_1_0(),
                      						current);
                      				
                    }

                    }

                    otherlv_3=(Token)match(input,74,FollowSets000.FOLLOW_80); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_3, grammarAccess.getTypeRefAccess().getIntegerKeyword_1_1());
                      			
                    }
                    // InternalReqSpec.g:5910:4: (otherlv_4= 'units' ( ( ruleAADLPROPERTYREFERENCE ) ) )?
                    int alt135=2;
                    int LA135_0 = input.LA(1);

                    if ( (LA135_0==75) ) {
                        alt135=1;
                    }
                    switch (alt135) {
                        case 1 :
                            // InternalReqSpec.g:5911:5: otherlv_4= 'units' ( ( ruleAADLPROPERTYREFERENCE ) )
                            {
                            otherlv_4=(Token)match(input,75,FollowSets000.FOLLOW_70); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              					newLeafNode(otherlv_4, grammarAccess.getTypeRefAccess().getUnitsKeyword_1_2_0());
                              				
                            }
                            // InternalReqSpec.g:5915:5: ( ( ruleAADLPROPERTYREFERENCE ) )
                            // InternalReqSpec.g:5916:6: ( ruleAADLPROPERTYREFERENCE )
                            {
                            // InternalReqSpec.g:5916:6: ( ruleAADLPROPERTYREFERENCE )
                            // InternalReqSpec.g:5917:7: ruleAADLPROPERTYREFERENCE
                            {
                            if ( state.backtracking==0 ) {

                              							if (current==null) {
                              								current = createModelElement(grammarAccess.getTypeRefRule());
                              							}
                              						
                            }
                            if ( state.backtracking==0 ) {

                              							newCompositeNode(grammarAccess.getTypeRefAccess().getReferencedUnitsTypeUnitsTypeCrossReference_1_2_1_0());
                              						
                            }
                            pushFollow(FollowSets000.FOLLOW_2);
                            ruleAADLPROPERTYREFERENCE();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							afterParserOrEnumRuleCall();
                              						
                            }

                            }


                            }


                            }
                            break;

                    }


                    }


                    }
                    break;
                case 3 :
                    // InternalReqSpec.g:5934:3: ( () otherlv_7= 'real' (otherlv_8= 'units' ( ( ruleAADLPROPERTYREFERENCE ) ) )? )
                    {
                    // InternalReqSpec.g:5934:3: ( () otherlv_7= 'real' (otherlv_8= 'units' ( ( ruleAADLPROPERTYREFERENCE ) ) )? )
                    // InternalReqSpec.g:5935:4: () otherlv_7= 'real' (otherlv_8= 'units' ( ( ruleAADLPROPERTYREFERENCE ) ) )?
                    {
                    // InternalReqSpec.g:5935:4: ()
                    // InternalReqSpec.g:5936:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElement(
                      						grammarAccess.getTypeRefAccess().getAadlRealAction_2_0(),
                      						current);
                      				
                    }

                    }

                    otherlv_7=(Token)match(input,76,FollowSets000.FOLLOW_80); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_7, grammarAccess.getTypeRefAccess().getRealKeyword_2_1());
                      			
                    }
                    // InternalReqSpec.g:5946:4: (otherlv_8= 'units' ( ( ruleAADLPROPERTYREFERENCE ) ) )?
                    int alt136=2;
                    int LA136_0 = input.LA(1);

                    if ( (LA136_0==75) ) {
                        alt136=1;
                    }
                    switch (alt136) {
                        case 1 :
                            // InternalReqSpec.g:5947:5: otherlv_8= 'units' ( ( ruleAADLPROPERTYREFERENCE ) )
                            {
                            otherlv_8=(Token)match(input,75,FollowSets000.FOLLOW_70); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              					newLeafNode(otherlv_8, grammarAccess.getTypeRefAccess().getUnitsKeyword_2_2_0());
                              				
                            }
                            // InternalReqSpec.g:5951:5: ( ( ruleAADLPROPERTYREFERENCE ) )
                            // InternalReqSpec.g:5952:6: ( ruleAADLPROPERTYREFERENCE )
                            {
                            // InternalReqSpec.g:5952:6: ( ruleAADLPROPERTYREFERENCE )
                            // InternalReqSpec.g:5953:7: ruleAADLPROPERTYREFERENCE
                            {
                            if ( state.backtracking==0 ) {

                              							if (current==null) {
                              								current = createModelElement(grammarAccess.getTypeRefRule());
                              							}
                              						
                            }
                            if ( state.backtracking==0 ) {

                              							newCompositeNode(grammarAccess.getTypeRefAccess().getReferencedUnitsTypeUnitsTypeCrossReference_2_2_1_0());
                              						
                            }
                            pushFollow(FollowSets000.FOLLOW_2);
                            ruleAADLPROPERTYREFERENCE();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							afterParserOrEnumRuleCall();
                              						
                            }

                            }


                            }


                            }
                            break;

                    }


                    }


                    }
                    break;
                case 4 :
                    // InternalReqSpec.g:5970:3: ( () otherlv_11= 'string' )
                    {
                    // InternalReqSpec.g:5970:3: ( () otherlv_11= 'string' )
                    // InternalReqSpec.g:5971:4: () otherlv_11= 'string'
                    {
                    // InternalReqSpec.g:5971:4: ()
                    // InternalReqSpec.g:5972:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElement(
                      						grammarAccess.getTypeRefAccess().getAadlStringAction_3_0(),
                      						current);
                      				
                    }

                    }

                    otherlv_11=(Token)match(input,77,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_11, grammarAccess.getTypeRefAccess().getStringKeyword_3_1());
                      			
                    }

                    }


                    }
                    break;
                case 5 :
                    // InternalReqSpec.g:5984:3: ( () otherlv_13= 'model' otherlv_14= 'element' )
                    {
                    // InternalReqSpec.g:5984:3: ( () otherlv_13= 'model' otherlv_14= 'element' )
                    // InternalReqSpec.g:5985:4: () otherlv_13= 'model' otherlv_14= 'element'
                    {
                    // InternalReqSpec.g:5985:4: ()
                    // InternalReqSpec.g:5986:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElement(
                      						grammarAccess.getTypeRefAccess().getModelRefAction_4_0(),
                      						current);
                      				
                    }

                    }

                    otherlv_13=(Token)match(input,78,FollowSets000.FOLLOW_81); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_13, grammarAccess.getTypeRefAccess().getModelKeyword_4_1());
                      			
                    }
                    otherlv_14=(Token)match(input,79,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_14, grammarAccess.getTypeRefAccess().getElementKeyword_4_2());
                      			
                    }

                    }


                    }
                    break;
                case 6 :
                    // InternalReqSpec.g:6002:3: ( () ( ( ruleAADLPROPERTYREFERENCE ) ) )
                    {
                    // InternalReqSpec.g:6002:3: ( () ( ( ruleAADLPROPERTYREFERENCE ) ) )
                    // InternalReqSpec.g:6003:4: () ( ( ruleAADLPROPERTYREFERENCE ) )
                    {
                    // InternalReqSpec.g:6003:4: ()
                    // InternalReqSpec.g:6004:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElement(
                      						grammarAccess.getTypeRefAccess().getTypeRefAction_5_0(),
                      						current);
                      				
                    }

                    }

                    // InternalReqSpec.g:6010:4: ( ( ruleAADLPROPERTYREFERENCE ) )
                    // InternalReqSpec.g:6011:5: ( ruleAADLPROPERTYREFERENCE )
                    {
                    // InternalReqSpec.g:6011:5: ( ruleAADLPROPERTYREFERENCE )
                    // InternalReqSpec.g:6012:6: ruleAADLPROPERTYREFERENCE
                    {
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getTypeRefRule());
                      						}
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getTypeRefAccess().getRefPropertyTypeCrossReference_5_1_0());
                      					
                    }
                    pushFollow(FollowSets000.FOLLOW_2);
                    ruleAADLPROPERTYREFERENCE();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }


                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleTypeRef"


    // $ANTLR start "entryRulePropertyRef"
    // InternalReqSpec.g:6031:1: entryRulePropertyRef returns [EObject current=null] : iv_rulePropertyRef= rulePropertyRef EOF ;
    public final EObject entryRulePropertyRef() throws RecognitionException {
        EObject current = null;

        EObject iv_rulePropertyRef = null;


        try {
            // InternalReqSpec.g:6031:52: (iv_rulePropertyRef= rulePropertyRef EOF )
            // InternalReqSpec.g:6032:2: iv_rulePropertyRef= rulePropertyRef EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getPropertyRefRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_rulePropertyRef=rulePropertyRef();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_rulePropertyRef; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRulePropertyRef"


    // $ANTLR start "rulePropertyRef"
    // InternalReqSpec.g:6038:1: rulePropertyRef returns [EObject current=null] : ( () ( ( ruleAADLPROPERTYREFERENCE ) ) ) ;
    public final EObject rulePropertyRef() throws RecognitionException {
        EObject current = null;


        	enterRule();

        try {
            // InternalReqSpec.g:6044:2: ( ( () ( ( ruleAADLPROPERTYREFERENCE ) ) ) )
            // InternalReqSpec.g:6045:2: ( () ( ( ruleAADLPROPERTYREFERENCE ) ) )
            {
            // InternalReqSpec.g:6045:2: ( () ( ( ruleAADLPROPERTYREFERENCE ) ) )
            // InternalReqSpec.g:6046:3: () ( ( ruleAADLPROPERTYREFERENCE ) )
            {
            // InternalReqSpec.g:6046:3: ()
            // InternalReqSpec.g:6047:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getPropertyRefAccess().getPropertyRefAction_0(),
              					current);
              			
            }

            }

            // InternalReqSpec.g:6053:3: ( ( ruleAADLPROPERTYREFERENCE ) )
            // InternalReqSpec.g:6054:4: ( ruleAADLPROPERTYREFERENCE )
            {
            // InternalReqSpec.g:6054:4: ( ruleAADLPROPERTYREFERENCE )
            // InternalReqSpec.g:6055:5: ruleAADLPROPERTYREFERENCE
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getPropertyRefRule());
              					}
              				
            }
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getPropertyRefAccess().getRefPropertyCrossReference_1_0());
              				
            }
            pushFollow(FollowSets000.FOLLOW_2);
            ruleAADLPROPERTYREFERENCE();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					afterParserOrEnumRuleCall();
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "rulePropertyRef"


    // $ANTLR start "entryRuleComputeDeclaration"
    // InternalReqSpec.g:6073:1: entryRuleComputeDeclaration returns [EObject current=null] : iv_ruleComputeDeclaration= ruleComputeDeclaration EOF ;
    public final EObject entryRuleComputeDeclaration() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleComputeDeclaration = null;


        try {
            // InternalReqSpec.g:6073:59: (iv_ruleComputeDeclaration= ruleComputeDeclaration EOF )
            // InternalReqSpec.g:6074:2: iv_ruleComputeDeclaration= ruleComputeDeclaration EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getComputeDeclarationRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleComputeDeclaration=ruleComputeDeclaration();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleComputeDeclaration; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleComputeDeclaration"


    // $ANTLR start "ruleComputeDeclaration"
    // InternalReqSpec.g:6080:1: ruleComputeDeclaration returns [EObject current=null] : ( () otherlv_1= 'compute' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= ':' ( ( (lv_type_4_0= ruleTypeRef ) ) | (otherlv_5= 'typeof' ( (lv_type_6_0= rulePropertyRef ) ) ) | ( ( (lv_range_7_0= '[' ) ) ( ( (lv_type_8_0= ruleTypeRef ) ) | (otherlv_9= 'typeof' ( (lv_type_10_0= rulePropertyRef ) ) ) ) otherlv_11= ']' ) ) ) ;
    public final EObject ruleComputeDeclaration() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token lv_name_2_0=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        Token lv_range_7_0=null;
        Token otherlv_9=null;
        Token otherlv_11=null;
        EObject lv_type_4_0 = null;

        EObject lv_type_6_0 = null;

        EObject lv_type_8_0 = null;

        EObject lv_type_10_0 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:6086:2: ( ( () otherlv_1= 'compute' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= ':' ( ( (lv_type_4_0= ruleTypeRef ) ) | (otherlv_5= 'typeof' ( (lv_type_6_0= rulePropertyRef ) ) ) | ( ( (lv_range_7_0= '[' ) ) ( ( (lv_type_8_0= ruleTypeRef ) ) | (otherlv_9= 'typeof' ( (lv_type_10_0= rulePropertyRef ) ) ) ) otherlv_11= ']' ) ) ) )
            // InternalReqSpec.g:6087:2: ( () otherlv_1= 'compute' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= ':' ( ( (lv_type_4_0= ruleTypeRef ) ) | (otherlv_5= 'typeof' ( (lv_type_6_0= rulePropertyRef ) ) ) | ( ( (lv_range_7_0= '[' ) ) ( ( (lv_type_8_0= ruleTypeRef ) ) | (otherlv_9= 'typeof' ( (lv_type_10_0= rulePropertyRef ) ) ) ) otherlv_11= ']' ) ) )
            {
            // InternalReqSpec.g:6087:2: ( () otherlv_1= 'compute' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= ':' ( ( (lv_type_4_0= ruleTypeRef ) ) | (otherlv_5= 'typeof' ( (lv_type_6_0= rulePropertyRef ) ) ) | ( ( (lv_range_7_0= '[' ) ) ( ( (lv_type_8_0= ruleTypeRef ) ) | (otherlv_9= 'typeof' ( (lv_type_10_0= rulePropertyRef ) ) ) ) otherlv_11= ']' ) ) )
            // InternalReqSpec.g:6088:3: () otherlv_1= 'compute' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= ':' ( ( (lv_type_4_0= ruleTypeRef ) ) | (otherlv_5= 'typeof' ( (lv_type_6_0= rulePropertyRef ) ) ) | ( ( (lv_range_7_0= '[' ) ) ( ( (lv_type_8_0= ruleTypeRef ) ) | (otherlv_9= 'typeof' ( (lv_type_10_0= rulePropertyRef ) ) ) ) otherlv_11= ']' ) )
            {
            // InternalReqSpec.g:6088:3: ()
            // InternalReqSpec.g:6089:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getComputeDeclarationAccess().getComputeDeclarationAction_0(),
              					current);
              			
            }

            }

            otherlv_1=(Token)match(input,80,FollowSets000.FOLLOW_4); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getComputeDeclarationAccess().getComputeKeyword_1());
              		
            }
            // InternalReqSpec.g:6099:3: ( (lv_name_2_0= RULE_ID ) )
            // InternalReqSpec.g:6100:4: (lv_name_2_0= RULE_ID )
            {
            // InternalReqSpec.g:6100:4: (lv_name_2_0= RULE_ID )
            // InternalReqSpec.g:6101:5: lv_name_2_0= RULE_ID
            {
            lv_name_2_0=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_82); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_2_0, grammarAccess.getComputeDeclarationAccess().getNameIDTerminalRuleCall_2_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getComputeDeclarationRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_2_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            otherlv_3=(Token)match(input,22,FollowSets000.FOLLOW_68); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_3, grammarAccess.getComputeDeclarationAccess().getColonKeyword_3());
              		
            }
            // InternalReqSpec.g:6121:3: ( ( (lv_type_4_0= ruleTypeRef ) ) | (otherlv_5= 'typeof' ( (lv_type_6_0= rulePropertyRef ) ) ) | ( ( (lv_range_7_0= '[' ) ) ( ( (lv_type_8_0= ruleTypeRef ) ) | (otherlv_9= 'typeof' ( (lv_type_10_0= rulePropertyRef ) ) ) ) otherlv_11= ']' ) )
            int alt139=3;
            switch ( input.LA(1) ) {
            case RULE_ID:
            case 73:
            case 74:
            case 76:
            case 77:
            case 78:
                {
                alt139=1;
                }
                break;
            case 61:
                {
                alt139=2;
                }
                break;
            case 18:
                {
                alt139=3;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 139, 0, input);

                throw nvae;
            }

            switch (alt139) {
                case 1 :
                    // InternalReqSpec.g:6122:4: ( (lv_type_4_0= ruleTypeRef ) )
                    {
                    // InternalReqSpec.g:6122:4: ( (lv_type_4_0= ruleTypeRef ) )
                    // InternalReqSpec.g:6123:5: (lv_type_4_0= ruleTypeRef )
                    {
                    // InternalReqSpec.g:6123:5: (lv_type_4_0= ruleTypeRef )
                    // InternalReqSpec.g:6124:6: lv_type_4_0= ruleTypeRef
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getComputeDeclarationAccess().getTypeTypeRefParserRuleCall_4_0_0());
                      					
                    }
                    pushFollow(FollowSets000.FOLLOW_2);
                    lv_type_4_0=ruleTypeRef();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getComputeDeclarationRule());
                      						}
                      						set(
                      							current,
                      							"type",
                      							lv_type_4_0,
                      							"org.osate.alisa.common.Common.TypeRef");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalReqSpec.g:6142:4: (otherlv_5= 'typeof' ( (lv_type_6_0= rulePropertyRef ) ) )
                    {
                    // InternalReqSpec.g:6142:4: (otherlv_5= 'typeof' ( (lv_type_6_0= rulePropertyRef ) ) )
                    // InternalReqSpec.g:6143:5: otherlv_5= 'typeof' ( (lv_type_6_0= rulePropertyRef ) )
                    {
                    otherlv_5=(Token)match(input,61,FollowSets000.FOLLOW_70); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_5, grammarAccess.getComputeDeclarationAccess().getTypeofKeyword_4_1_0());
                      				
                    }
                    // InternalReqSpec.g:6147:5: ( (lv_type_6_0= rulePropertyRef ) )
                    // InternalReqSpec.g:6148:6: (lv_type_6_0= rulePropertyRef )
                    {
                    // InternalReqSpec.g:6148:6: (lv_type_6_0= rulePropertyRef )
                    // InternalReqSpec.g:6149:7: lv_type_6_0= rulePropertyRef
                    {
                    if ( state.backtracking==0 ) {

                      							newCompositeNode(grammarAccess.getComputeDeclarationAccess().getTypePropertyRefParserRuleCall_4_1_1_0());
                      						
                    }
                    pushFollow(FollowSets000.FOLLOW_2);
                    lv_type_6_0=rulePropertyRef();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							if (current==null) {
                      								current = createModelElementForParent(grammarAccess.getComputeDeclarationRule());
                      							}
                      							set(
                      								current,
                      								"type",
                      								lv_type_6_0,
                      								"org.osate.alisa.common.Common.PropertyRef");
                      							afterParserOrEnumRuleCall();
                      						
                    }

                    }


                    }


                    }


                    }
                    break;
                case 3 :
                    // InternalReqSpec.g:6168:4: ( ( (lv_range_7_0= '[' ) ) ( ( (lv_type_8_0= ruleTypeRef ) ) | (otherlv_9= 'typeof' ( (lv_type_10_0= rulePropertyRef ) ) ) ) otherlv_11= ']' )
                    {
                    // InternalReqSpec.g:6168:4: ( ( (lv_range_7_0= '[' ) ) ( ( (lv_type_8_0= ruleTypeRef ) ) | (otherlv_9= 'typeof' ( (lv_type_10_0= rulePropertyRef ) ) ) ) otherlv_11= ']' )
                    // InternalReqSpec.g:6169:5: ( (lv_range_7_0= '[' ) ) ( ( (lv_type_8_0= ruleTypeRef ) ) | (otherlv_9= 'typeof' ( (lv_type_10_0= rulePropertyRef ) ) ) ) otherlv_11= ']'
                    {
                    // InternalReqSpec.g:6169:5: ( (lv_range_7_0= '[' ) )
                    // InternalReqSpec.g:6170:6: (lv_range_7_0= '[' )
                    {
                    // InternalReqSpec.g:6170:6: (lv_range_7_0= '[' )
                    // InternalReqSpec.g:6171:7: lv_range_7_0= '['
                    {
                    lv_range_7_0=(Token)match(input,18,FollowSets000.FOLLOW_71); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							newLeafNode(lv_range_7_0, grammarAccess.getComputeDeclarationAccess().getRangeLeftSquareBracketKeyword_4_2_0_0());
                      						
                    }
                    if ( state.backtracking==0 ) {

                      							if (current==null) {
                      								current = createModelElement(grammarAccess.getComputeDeclarationRule());
                      							}
                      							setWithLastConsumed(current, "range", true, "[");
                      						
                    }

                    }


                    }

                    // InternalReqSpec.g:6183:5: ( ( (lv_type_8_0= ruleTypeRef ) ) | (otherlv_9= 'typeof' ( (lv_type_10_0= rulePropertyRef ) ) ) )
                    int alt138=2;
                    int LA138_0 = input.LA(1);

                    if ( (LA138_0==RULE_ID||(LA138_0>=73 && LA138_0<=74)||(LA138_0>=76 && LA138_0<=78)) ) {
                        alt138=1;
                    }
                    else if ( (LA138_0==61) ) {
                        alt138=2;
                    }
                    else {
                        if (state.backtracking>0) {state.failed=true; return current;}
                        NoViableAltException nvae =
                            new NoViableAltException("", 138, 0, input);

                        throw nvae;
                    }
                    switch (alt138) {
                        case 1 :
                            // InternalReqSpec.g:6184:6: ( (lv_type_8_0= ruleTypeRef ) )
                            {
                            // InternalReqSpec.g:6184:6: ( (lv_type_8_0= ruleTypeRef ) )
                            // InternalReqSpec.g:6185:7: (lv_type_8_0= ruleTypeRef )
                            {
                            // InternalReqSpec.g:6185:7: (lv_type_8_0= ruleTypeRef )
                            // InternalReqSpec.g:6186:8: lv_type_8_0= ruleTypeRef
                            {
                            if ( state.backtracking==0 ) {

                              								newCompositeNode(grammarAccess.getComputeDeclarationAccess().getTypeTypeRefParserRuleCall_4_2_1_0_0());
                              							
                            }
                            pushFollow(FollowSets000.FOLLOW_72);
                            lv_type_8_0=ruleTypeRef();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              								if (current==null) {
                              									current = createModelElementForParent(grammarAccess.getComputeDeclarationRule());
                              								}
                              								set(
                              									current,
                              									"type",
                              									lv_type_8_0,
                              									"org.osate.alisa.common.Common.TypeRef");
                              								afterParserOrEnumRuleCall();
                              							
                            }

                            }


                            }


                            }
                            break;
                        case 2 :
                            // InternalReqSpec.g:6204:6: (otherlv_9= 'typeof' ( (lv_type_10_0= rulePropertyRef ) ) )
                            {
                            // InternalReqSpec.g:6204:6: (otherlv_9= 'typeof' ( (lv_type_10_0= rulePropertyRef ) ) )
                            // InternalReqSpec.g:6205:7: otherlv_9= 'typeof' ( (lv_type_10_0= rulePropertyRef ) )
                            {
                            otherlv_9=(Token)match(input,61,FollowSets000.FOLLOW_70); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							newLeafNode(otherlv_9, grammarAccess.getComputeDeclarationAccess().getTypeofKeyword_4_2_1_1_0());
                              						
                            }
                            // InternalReqSpec.g:6209:7: ( (lv_type_10_0= rulePropertyRef ) )
                            // InternalReqSpec.g:6210:8: (lv_type_10_0= rulePropertyRef )
                            {
                            // InternalReqSpec.g:6210:8: (lv_type_10_0= rulePropertyRef )
                            // InternalReqSpec.g:6211:9: lv_type_10_0= rulePropertyRef
                            {
                            if ( state.backtracking==0 ) {

                              									newCompositeNode(grammarAccess.getComputeDeclarationAccess().getTypePropertyRefParserRuleCall_4_2_1_1_1_0());
                              								
                            }
                            pushFollow(FollowSets000.FOLLOW_72);
                            lv_type_10_0=rulePropertyRef();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              									if (current==null) {
                              										current = createModelElementForParent(grammarAccess.getComputeDeclarationRule());
                              									}
                              									set(
                              										current,
                              										"type",
                              										lv_type_10_0,
                              										"org.osate.alisa.common.Common.PropertyRef");
                              									afterParserOrEnumRuleCall();
                              								
                            }

                            }


                            }


                            }


                            }
                            break;

                    }

                    otherlv_11=(Token)match(input,19,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_11, grammarAccess.getComputeDeclarationAccess().getRightSquareBracketKeyword_4_2_2());
                      				
                    }

                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleComputeDeclaration"


    // $ANTLR start "entryRuleAModelOrPropertyReference"
    // InternalReqSpec.g:6240:1: entryRuleAModelOrPropertyReference returns [EObject current=null] : iv_ruleAModelOrPropertyReference= ruleAModelOrPropertyReference EOF ;
    public final EObject entryRuleAModelOrPropertyReference() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAModelOrPropertyReference = null;


        try {
            // InternalReqSpec.g:6240:66: (iv_ruleAModelOrPropertyReference= ruleAModelOrPropertyReference EOF )
            // InternalReqSpec.g:6241:2: iv_ruleAModelOrPropertyReference= ruleAModelOrPropertyReference EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAModelOrPropertyReferenceRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleAModelOrPropertyReference=ruleAModelOrPropertyReference();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAModelOrPropertyReference; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAModelOrPropertyReference"


    // $ANTLR start "ruleAModelOrPropertyReference"
    // InternalReqSpec.g:6247:1: ruleAModelOrPropertyReference returns [EObject current=null] : ( (this_AModelReference_0= ruleAModelReference ( ( ( ( () '#' ) )=> ( () otherlv_2= '#' ) ) ( ( ruleAADLPROPERTYREFERENCE ) ) )? ) | this_APropertyReference_4= ruleAPropertyReference ) ;
    public final EObject ruleAModelOrPropertyReference() throws RecognitionException {
        EObject current = null;

        Token otherlv_2=null;
        EObject this_AModelReference_0 = null;

        EObject this_APropertyReference_4 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:6253:2: ( ( (this_AModelReference_0= ruleAModelReference ( ( ( ( () '#' ) )=> ( () otherlv_2= '#' ) ) ( ( ruleAADLPROPERTYREFERENCE ) ) )? ) | this_APropertyReference_4= ruleAPropertyReference ) )
            // InternalReqSpec.g:6254:2: ( (this_AModelReference_0= ruleAModelReference ( ( ( ( () '#' ) )=> ( () otherlv_2= '#' ) ) ( ( ruleAADLPROPERTYREFERENCE ) ) )? ) | this_APropertyReference_4= ruleAPropertyReference )
            {
            // InternalReqSpec.g:6254:2: ( (this_AModelReference_0= ruleAModelReference ( ( ( ( () '#' ) )=> ( () otherlv_2= '#' ) ) ( ( ruleAADLPROPERTYREFERENCE ) ) )? ) | this_APropertyReference_4= ruleAPropertyReference )
            int alt141=2;
            int LA141_0 = input.LA(1);

            if ( (LA141_0==67) ) {
                alt141=1;
            }
            else if ( (LA141_0==59) ) {
                alt141=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 141, 0, input);

                throw nvae;
            }
            switch (alt141) {
                case 1 :
                    // InternalReqSpec.g:6255:3: (this_AModelReference_0= ruleAModelReference ( ( ( ( () '#' ) )=> ( () otherlv_2= '#' ) ) ( ( ruleAADLPROPERTYREFERENCE ) ) )? )
                    {
                    // InternalReqSpec.g:6255:3: (this_AModelReference_0= ruleAModelReference ( ( ( ( () '#' ) )=> ( () otherlv_2= '#' ) ) ( ( ruleAADLPROPERTYREFERENCE ) ) )? )
                    // InternalReqSpec.g:6256:4: this_AModelReference_0= ruleAModelReference ( ( ( ( () '#' ) )=> ( () otherlv_2= '#' ) ) ( ( ruleAADLPROPERTYREFERENCE ) ) )?
                    {
                    if ( state.backtracking==0 ) {

                      				newCompositeNode(grammarAccess.getAModelOrPropertyReferenceAccess().getAModelReferenceParserRuleCall_0_0());
                      			
                    }
                    pushFollow(FollowSets000.FOLLOW_66);
                    this_AModelReference_0=ruleAModelReference();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current = this_AModelReference_0;
                      				afterParserOrEnumRuleCall();
                      			
                    }
                    // InternalReqSpec.g:6264:4: ( ( ( ( () '#' ) )=> ( () otherlv_2= '#' ) ) ( ( ruleAADLPROPERTYREFERENCE ) ) )?
                    int alt140=2;
                    int LA140_0 = input.LA(1);

                    if ( (LA140_0==59) && (synpred3_InternalReqSpec())) {
                        alt140=1;
                    }
                    switch (alt140) {
                        case 1 :
                            // InternalReqSpec.g:6265:5: ( ( ( () '#' ) )=> ( () otherlv_2= '#' ) ) ( ( ruleAADLPROPERTYREFERENCE ) )
                            {
                            // InternalReqSpec.g:6265:5: ( ( ( () '#' ) )=> ( () otherlv_2= '#' ) )
                            // InternalReqSpec.g:6266:6: ( ( () '#' ) )=> ( () otherlv_2= '#' )
                            {
                            // InternalReqSpec.g:6272:6: ( () otherlv_2= '#' )
                            // InternalReqSpec.g:6273:7: () otherlv_2= '#'
                            {
                            // InternalReqSpec.g:6273:7: ()
                            // InternalReqSpec.g:6274:8: 
                            {
                            if ( state.backtracking==0 ) {

                              								current = forceCreateModelElementAndSet(
                              									grammarAccess.getAModelOrPropertyReferenceAccess().getAPropertyReferenceModelElementReferenceAction_0_1_0_0_0(),
                              									current);
                              							
                            }

                            }

                            otherlv_2=(Token)match(input,59,FollowSets000.FOLLOW_70); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							newLeafNode(otherlv_2, grammarAccess.getAModelOrPropertyReferenceAccess().getNumberSignKeyword_0_1_0_0_1());
                              						
                            }

                            }


                            }

                            // InternalReqSpec.g:6286:5: ( ( ruleAADLPROPERTYREFERENCE ) )
                            // InternalReqSpec.g:6287:6: ( ruleAADLPROPERTYREFERENCE )
                            {
                            // InternalReqSpec.g:6287:6: ( ruleAADLPROPERTYREFERENCE )
                            // InternalReqSpec.g:6288:7: ruleAADLPROPERTYREFERENCE
                            {
                            if ( state.backtracking==0 ) {

                              							if (current==null) {
                              								current = createModelElement(grammarAccess.getAModelOrPropertyReferenceRule());
                              							}
                              						
                            }
                            if ( state.backtracking==0 ) {

                              							newCompositeNode(grammarAccess.getAModelOrPropertyReferenceAccess().getPropertyAbstractNamedValueCrossReference_0_1_1_0());
                              						
                            }
                            pushFollow(FollowSets000.FOLLOW_2);
                            ruleAADLPROPERTYREFERENCE();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							afterParserOrEnumRuleCall();
                              						
                            }

                            }


                            }


                            }
                            break;

                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalReqSpec.g:6305:3: this_APropertyReference_4= ruleAPropertyReference
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getAModelOrPropertyReferenceAccess().getAPropertyReferenceParserRuleCall_1());
                      		
                    }
                    pushFollow(FollowSets000.FOLLOW_2);
                    this_APropertyReference_4=ruleAPropertyReference();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_APropertyReference_4;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAModelOrPropertyReference"


    // $ANTLR start "entryRuleAModelReference"
    // InternalReqSpec.g:6317:1: entryRuleAModelReference returns [EObject current=null] : iv_ruleAModelReference= ruleAModelReference EOF ;
    public final EObject entryRuleAModelReference() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAModelReference = null;


        try {
            // InternalReqSpec.g:6317:56: (iv_ruleAModelReference= ruleAModelReference EOF )
            // InternalReqSpec.g:6318:2: iv_ruleAModelReference= ruleAModelReference EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAModelReferenceRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleAModelReference=ruleAModelReference();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAModelReference; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAModelReference"


    // $ANTLR start "ruleAModelReference"
    // InternalReqSpec.g:6324:1: ruleAModelReference returns [EObject current=null] : ( ( ( ruleThisKeyword ) ) ( () otherlv_2= '.' ( (otherlv_3= RULE_ID ) ) )* ) ;
    public final EObject ruleAModelReference() throws RecognitionException {
        EObject current = null;

        Token otherlv_2=null;
        Token otherlv_3=null;


        	enterRule();

        try {
            // InternalReqSpec.g:6330:2: ( ( ( ( ruleThisKeyword ) ) ( () otherlv_2= '.' ( (otherlv_3= RULE_ID ) ) )* ) )
            // InternalReqSpec.g:6331:2: ( ( ( ruleThisKeyword ) ) ( () otherlv_2= '.' ( (otherlv_3= RULE_ID ) ) )* )
            {
            // InternalReqSpec.g:6331:2: ( ( ( ruleThisKeyword ) ) ( () otherlv_2= '.' ( (otherlv_3= RULE_ID ) ) )* )
            // InternalReqSpec.g:6332:3: ( ( ruleThisKeyword ) ) ( () otherlv_2= '.' ( (otherlv_3= RULE_ID ) ) )*
            {
            // InternalReqSpec.g:6332:3: ( ( ruleThisKeyword ) )
            // InternalReqSpec.g:6333:4: ( ruleThisKeyword )
            {
            // InternalReqSpec.g:6333:4: ( ruleThisKeyword )
            // InternalReqSpec.g:6334:5: ruleThisKeyword
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getAModelReferenceRule());
              					}
              				
            }
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getAModelReferenceAccess().getModelElementNamedElementCrossReference_0_0());
              				
            }
            pushFollow(FollowSets000.FOLLOW_83);
            ruleThisKeyword();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalReqSpec.g:6348:3: ( () otherlv_2= '.' ( (otherlv_3= RULE_ID ) ) )*
            loop142:
            do {
                int alt142=2;
                int LA142_0 = input.LA(1);

                if ( (LA142_0==65) ) {
                    alt142=1;
                }


                switch (alt142) {
            	case 1 :
            	    // InternalReqSpec.g:6349:4: () otherlv_2= '.' ( (otherlv_3= RULE_ID ) )
            	    {
            	    // InternalReqSpec.g:6349:4: ()
            	    // InternalReqSpec.g:6350:5: 
            	    {
            	    if ( state.backtracking==0 ) {

            	      					current = forceCreateModelElementAndSet(
            	      						grammarAccess.getAModelReferenceAccess().getAModelReferencePrevAction_1_0(),
            	      						current);
            	      				
            	    }

            	    }

            	    otherlv_2=(Token)match(input,65,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				newLeafNode(otherlv_2, grammarAccess.getAModelReferenceAccess().getFullStopKeyword_1_1());
            	      			
            	    }
            	    // InternalReqSpec.g:6360:4: ( (otherlv_3= RULE_ID ) )
            	    // InternalReqSpec.g:6361:5: (otherlv_3= RULE_ID )
            	    {
            	    // InternalReqSpec.g:6361:5: (otherlv_3= RULE_ID )
            	    // InternalReqSpec.g:6362:6: otherlv_3= RULE_ID
            	    {
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElement(grammarAccess.getAModelReferenceRule());
            	      						}
            	      					
            	    }
            	    otherlv_3=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_83); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						newLeafNode(otherlv_3, grammarAccess.getAModelReferenceAccess().getModelElementNamedElementCrossReference_1_2_0());
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop142;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAModelReference"


    // $ANTLR start "entryRuleAPropertyReference"
    // InternalReqSpec.g:6378:1: entryRuleAPropertyReference returns [EObject current=null] : iv_ruleAPropertyReference= ruleAPropertyReference EOF ;
    public final EObject entryRuleAPropertyReference() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAPropertyReference = null;


        try {
            // InternalReqSpec.g:6378:59: (iv_ruleAPropertyReference= ruleAPropertyReference EOF )
            // InternalReqSpec.g:6379:2: iv_ruleAPropertyReference= ruleAPropertyReference EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAPropertyReferenceRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleAPropertyReference=ruleAPropertyReference();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAPropertyReference; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAPropertyReference"


    // $ANTLR start "ruleAPropertyReference"
    // InternalReqSpec.g:6385:1: ruleAPropertyReference returns [EObject current=null] : ( () otherlv_1= '#' ( ( ruleAADLPROPERTYREFERENCE ) ) ) ;
    public final EObject ruleAPropertyReference() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;


        	enterRule();

        try {
            // InternalReqSpec.g:6391:2: ( ( () otherlv_1= '#' ( ( ruleAADLPROPERTYREFERENCE ) ) ) )
            // InternalReqSpec.g:6392:2: ( () otherlv_1= '#' ( ( ruleAADLPROPERTYREFERENCE ) ) )
            {
            // InternalReqSpec.g:6392:2: ( () otherlv_1= '#' ( ( ruleAADLPROPERTYREFERENCE ) ) )
            // InternalReqSpec.g:6393:3: () otherlv_1= '#' ( ( ruleAADLPROPERTYREFERENCE ) )
            {
            // InternalReqSpec.g:6393:3: ()
            // InternalReqSpec.g:6394:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getAPropertyReferenceAccess().getAPropertyReferenceAction_0(),
              					current);
              			
            }

            }

            otherlv_1=(Token)match(input,59,FollowSets000.FOLLOW_70); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getAPropertyReferenceAccess().getNumberSignKeyword_1());
              		
            }
            // InternalReqSpec.g:6404:3: ( ( ruleAADLPROPERTYREFERENCE ) )
            // InternalReqSpec.g:6405:4: ( ruleAADLPROPERTYREFERENCE )
            {
            // InternalReqSpec.g:6405:4: ( ruleAADLPROPERTYREFERENCE )
            // InternalReqSpec.g:6406:5: ruleAADLPROPERTYREFERENCE
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getAPropertyReferenceRule());
              					}
              				
            }
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getAPropertyReferenceAccess().getPropertyAbstractNamedValueCrossReference_2_0());
              				
            }
            pushFollow(FollowSets000.FOLLOW_2);
            ruleAADLPROPERTYREFERENCE();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					afterParserOrEnumRuleCall();
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAPropertyReference"


    // $ANTLR start "entryRuleAVariableReference"
    // InternalReqSpec.g:6424:1: entryRuleAVariableReference returns [EObject current=null] : iv_ruleAVariableReference= ruleAVariableReference EOF ;
    public final EObject entryRuleAVariableReference() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAVariableReference = null;


        try {
            // InternalReqSpec.g:6424:59: (iv_ruleAVariableReference= ruleAVariableReference EOF )
            // InternalReqSpec.g:6425:2: iv_ruleAVariableReference= ruleAVariableReference EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAVariableReferenceRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleAVariableReference=ruleAVariableReference();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAVariableReference; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAVariableReference"


    // $ANTLR start "ruleAVariableReference"
    // InternalReqSpec.g:6431:1: ruleAVariableReference returns [EObject current=null] : ( () ( (otherlv_1= RULE_ID ) ) ) ;
    public final EObject ruleAVariableReference() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;


        	enterRule();

        try {
            // InternalReqSpec.g:6437:2: ( ( () ( (otherlv_1= RULE_ID ) ) ) )
            // InternalReqSpec.g:6438:2: ( () ( (otherlv_1= RULE_ID ) ) )
            {
            // InternalReqSpec.g:6438:2: ( () ( (otherlv_1= RULE_ID ) ) )
            // InternalReqSpec.g:6439:3: () ( (otherlv_1= RULE_ID ) )
            {
            // InternalReqSpec.g:6439:3: ()
            // InternalReqSpec.g:6440:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getAVariableReferenceAccess().getAVariableReferenceAction_0(),
              					current);
              			
            }

            }

            // InternalReqSpec.g:6446:3: ( (otherlv_1= RULE_ID ) )
            // InternalReqSpec.g:6447:4: (otherlv_1= RULE_ID )
            {
            // InternalReqSpec.g:6447:4: (otherlv_1= RULE_ID )
            // InternalReqSpec.g:6448:5: otherlv_1= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getAVariableReferenceRule());
              					}
              				
            }
            otherlv_1=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_1, grammarAccess.getAVariableReferenceAccess().getVariableAVariableDeclarationCrossReference_1_0());
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAVariableReference"


    // $ANTLR start "entryRuleShowValue"
    // InternalReqSpec.g:6463:1: entryRuleShowValue returns [EObject current=null] : iv_ruleShowValue= ruleShowValue EOF ;
    public final EObject entryRuleShowValue() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleShowValue = null;


        try {
            // InternalReqSpec.g:6463:50: (iv_ruleShowValue= ruleShowValue EOF )
            // InternalReqSpec.g:6464:2: iv_ruleShowValue= ruleShowValue EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getShowValueRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleShowValue=ruleShowValue();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleShowValue; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleShowValue"


    // $ANTLR start "ruleShowValue"
    // InternalReqSpec.g:6470:1: ruleShowValue returns [EObject current=null] : ( ( (lv_expression_0_0= ruleAVariableReference ) ) ( ( ( (lv_convert_1_0= '%' ) ) | ( (lv_drop_2_0= 'in' ) ) ) ( (otherlv_3= RULE_ID ) ) )? ) ;
    public final EObject ruleShowValue() throws RecognitionException {
        EObject current = null;

        Token lv_convert_1_0=null;
        Token lv_drop_2_0=null;
        Token otherlv_3=null;
        EObject lv_expression_0_0 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:6476:2: ( ( ( (lv_expression_0_0= ruleAVariableReference ) ) ( ( ( (lv_convert_1_0= '%' ) ) | ( (lv_drop_2_0= 'in' ) ) ) ( (otherlv_3= RULE_ID ) ) )? ) )
            // InternalReqSpec.g:6477:2: ( ( (lv_expression_0_0= ruleAVariableReference ) ) ( ( ( (lv_convert_1_0= '%' ) ) | ( (lv_drop_2_0= 'in' ) ) ) ( (otherlv_3= RULE_ID ) ) )? )
            {
            // InternalReqSpec.g:6477:2: ( ( (lv_expression_0_0= ruleAVariableReference ) ) ( ( ( (lv_convert_1_0= '%' ) ) | ( (lv_drop_2_0= 'in' ) ) ) ( (otherlv_3= RULE_ID ) ) )? )
            // InternalReqSpec.g:6478:3: ( (lv_expression_0_0= ruleAVariableReference ) ) ( ( ( (lv_convert_1_0= '%' ) ) | ( (lv_drop_2_0= 'in' ) ) ) ( (otherlv_3= RULE_ID ) ) )?
            {
            // InternalReqSpec.g:6478:3: ( (lv_expression_0_0= ruleAVariableReference ) )
            // InternalReqSpec.g:6479:4: (lv_expression_0_0= ruleAVariableReference )
            {
            // InternalReqSpec.g:6479:4: (lv_expression_0_0= ruleAVariableReference )
            // InternalReqSpec.g:6480:5: lv_expression_0_0= ruleAVariableReference
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getShowValueAccess().getExpressionAVariableReferenceParserRuleCall_0_0());
              				
            }
            pushFollow(FollowSets000.FOLLOW_84);
            lv_expression_0_0=ruleAVariableReference();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getShowValueRule());
              					}
              					set(
              						current,
              						"expression",
              						lv_expression_0_0,
              						"org.osate.alisa.common.Common.AVariableReference");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalReqSpec.g:6497:3: ( ( ( (lv_convert_1_0= '%' ) ) | ( (lv_drop_2_0= 'in' ) ) ) ( (otherlv_3= RULE_ID ) ) )?
            int alt144=2;
            int LA144_0 = input.LA(1);

            if ( (LA144_0==47||LA144_0==81) ) {
                alt144=1;
            }
            switch (alt144) {
                case 1 :
                    // InternalReqSpec.g:6498:4: ( ( (lv_convert_1_0= '%' ) ) | ( (lv_drop_2_0= 'in' ) ) ) ( (otherlv_3= RULE_ID ) )
                    {
                    // InternalReqSpec.g:6498:4: ( ( (lv_convert_1_0= '%' ) ) | ( (lv_drop_2_0= 'in' ) ) )
                    int alt143=2;
                    int LA143_0 = input.LA(1);

                    if ( (LA143_0==81) ) {
                        alt143=1;
                    }
                    else if ( (LA143_0==47) ) {
                        alt143=2;
                    }
                    else {
                        if (state.backtracking>0) {state.failed=true; return current;}
                        NoViableAltException nvae =
                            new NoViableAltException("", 143, 0, input);

                        throw nvae;
                    }
                    switch (alt143) {
                        case 1 :
                            // InternalReqSpec.g:6499:5: ( (lv_convert_1_0= '%' ) )
                            {
                            // InternalReqSpec.g:6499:5: ( (lv_convert_1_0= '%' ) )
                            // InternalReqSpec.g:6500:6: (lv_convert_1_0= '%' )
                            {
                            // InternalReqSpec.g:6500:6: (lv_convert_1_0= '%' )
                            // InternalReqSpec.g:6501:7: lv_convert_1_0= '%'
                            {
                            lv_convert_1_0=(Token)match(input,81,FollowSets000.FOLLOW_4); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							newLeafNode(lv_convert_1_0, grammarAccess.getShowValueAccess().getConvertPercentSignKeyword_1_0_0_0());
                              						
                            }
                            if ( state.backtracking==0 ) {

                              							if (current==null) {
                              								current = createModelElement(grammarAccess.getShowValueRule());
                              							}
                              							setWithLastConsumed(current, "convert", true, "%");
                              						
                            }

                            }


                            }


                            }
                            break;
                        case 2 :
                            // InternalReqSpec.g:6514:5: ( (lv_drop_2_0= 'in' ) )
                            {
                            // InternalReqSpec.g:6514:5: ( (lv_drop_2_0= 'in' ) )
                            // InternalReqSpec.g:6515:6: (lv_drop_2_0= 'in' )
                            {
                            // InternalReqSpec.g:6515:6: (lv_drop_2_0= 'in' )
                            // InternalReqSpec.g:6516:7: lv_drop_2_0= 'in'
                            {
                            lv_drop_2_0=(Token)match(input,47,FollowSets000.FOLLOW_4); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							newLeafNode(lv_drop_2_0, grammarAccess.getShowValueAccess().getDropInKeyword_1_0_1_0());
                              						
                            }
                            if ( state.backtracking==0 ) {

                              							if (current==null) {
                              								current = createModelElement(grammarAccess.getShowValueRule());
                              							}
                              							setWithLastConsumed(current, "drop", true, "in");
                              						
                            }

                            }


                            }


                            }
                            break;

                    }

                    // InternalReqSpec.g:6529:4: ( (otherlv_3= RULE_ID ) )
                    // InternalReqSpec.g:6530:5: (otherlv_3= RULE_ID )
                    {
                    // InternalReqSpec.g:6530:5: (otherlv_3= RULE_ID )
                    // InternalReqSpec.g:6531:6: otherlv_3= RULE_ID
                    {
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getShowValueRule());
                      						}
                      					
                    }
                    otherlv_3=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(otherlv_3, grammarAccess.getShowValueAccess().getUnitUnitLiteralCrossReference_1_1_0());
                      					
                    }

                    }


                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleShowValue"


    // $ANTLR start "entryRuleImageReference"
    // InternalReqSpec.g:6547:1: entryRuleImageReference returns [EObject current=null] : iv_ruleImageReference= ruleImageReference EOF ;
    public final EObject entryRuleImageReference() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleImageReference = null;


        try {
            // InternalReqSpec.g:6547:55: (iv_ruleImageReference= ruleImageReference EOF )
            // InternalReqSpec.g:6548:2: iv_ruleImageReference= ruleImageReference EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getImageReferenceRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleImageReference=ruleImageReference();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleImageReference; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleImageReference"


    // $ANTLR start "ruleImageReference"
    // InternalReqSpec.g:6554:1: ruleImageReference returns [EObject current=null] : (otherlv_0= 'img' ( (lv_imgfile_1_0= ruleIMGREF ) ) ) ;
    public final EObject ruleImageReference() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        AntlrDatatypeRuleToken lv_imgfile_1_0 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:6560:2: ( (otherlv_0= 'img' ( (lv_imgfile_1_0= ruleIMGREF ) ) ) )
            // InternalReqSpec.g:6561:2: (otherlv_0= 'img' ( (lv_imgfile_1_0= ruleIMGREF ) ) )
            {
            // InternalReqSpec.g:6561:2: (otherlv_0= 'img' ( (lv_imgfile_1_0= ruleIMGREF ) ) )
            // InternalReqSpec.g:6562:3: otherlv_0= 'img' ( (lv_imgfile_1_0= ruleIMGREF ) )
            {
            otherlv_0=(Token)match(input,82,FollowSets000.FOLLOW_4); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getImageReferenceAccess().getImgKeyword_0());
              		
            }
            // InternalReqSpec.g:6566:3: ( (lv_imgfile_1_0= ruleIMGREF ) )
            // InternalReqSpec.g:6567:4: (lv_imgfile_1_0= ruleIMGREF )
            {
            // InternalReqSpec.g:6567:4: (lv_imgfile_1_0= ruleIMGREF )
            // InternalReqSpec.g:6568:5: lv_imgfile_1_0= ruleIMGREF
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getImageReferenceAccess().getImgfileIMGREFParserRuleCall_1_0());
              				
            }
            pushFollow(FollowSets000.FOLLOW_2);
            lv_imgfile_1_0=ruleIMGREF();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getImageReferenceRule());
              					}
              					set(
              						current,
              						"imgfile",
              						lv_imgfile_1_0,
              						"org.osate.alisa.common.Common.IMGREF");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleImageReference"


    // $ANTLR start "entryRuleIMGREF"
    // InternalReqSpec.g:6589:1: entryRuleIMGREF returns [String current=null] : iv_ruleIMGREF= ruleIMGREF EOF ;
    public final String entryRuleIMGREF() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleIMGREF = null;


        try {
            // InternalReqSpec.g:6589:46: (iv_ruleIMGREF= ruleIMGREF EOF )
            // InternalReqSpec.g:6590:2: iv_ruleIMGREF= ruleIMGREF EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getIMGREFRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleIMGREF=ruleIMGREF();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleIMGREF.getText(); 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleIMGREF"


    // $ANTLR start "ruleIMGREF"
    // InternalReqSpec.g:6596:1: ruleIMGREF returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : ( (this_ID_0= RULE_ID kw= '/' )* this_ID_2= RULE_ID kw= '.' this_ID_4= RULE_ID ) ;
    public final AntlrDatatypeRuleToken ruleIMGREF() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token this_ID_0=null;
        Token kw=null;
        Token this_ID_2=null;
        Token this_ID_4=null;


        	enterRule();

        try {
            // InternalReqSpec.g:6602:2: ( ( (this_ID_0= RULE_ID kw= '/' )* this_ID_2= RULE_ID kw= '.' this_ID_4= RULE_ID ) )
            // InternalReqSpec.g:6603:2: ( (this_ID_0= RULE_ID kw= '/' )* this_ID_2= RULE_ID kw= '.' this_ID_4= RULE_ID )
            {
            // InternalReqSpec.g:6603:2: ( (this_ID_0= RULE_ID kw= '/' )* this_ID_2= RULE_ID kw= '.' this_ID_4= RULE_ID )
            // InternalReqSpec.g:6604:3: (this_ID_0= RULE_ID kw= '/' )* this_ID_2= RULE_ID kw= '.' this_ID_4= RULE_ID
            {
            // InternalReqSpec.g:6604:3: (this_ID_0= RULE_ID kw= '/' )*
            loop145:
            do {
                int alt145=2;
                int LA145_0 = input.LA(1);

                if ( (LA145_0==RULE_ID) ) {
                    int LA145_1 = input.LA(2);

                    if ( (LA145_1==64) ) {
                        alt145=1;
                    }


                }


                switch (alt145) {
            	case 1 :
            	    // InternalReqSpec.g:6605:4: this_ID_0= RULE_ID kw= '/'
            	    {
            	    this_ID_0=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_74); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				current.merge(this_ID_0);
            	      			
            	    }
            	    if ( state.backtracking==0 ) {

            	      				newLeafNode(this_ID_0, grammarAccess.getIMGREFAccess().getIDTerminalRuleCall_0_0());
            	      			
            	    }
            	    kw=(Token)match(input,64,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				current.merge(kw);
            	      				newLeafNode(kw, grammarAccess.getIMGREFAccess().getSolidusKeyword_0_1());
            	      			
            	    }

            	    }
            	    break;

            	default :
            	    break loop145;
                }
            } while (true);

            this_ID_2=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_75); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current.merge(this_ID_2);
              		
            }
            if ( state.backtracking==0 ) {

              			newLeafNode(this_ID_2, grammarAccess.getIMGREFAccess().getIDTerminalRuleCall_1());
              		
            }
            kw=(Token)match(input,65,FollowSets000.FOLLOW_4); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current.merge(kw);
              			newLeafNode(kw, grammarAccess.getIMGREFAccess().getFullStopKeyword_2());
              		
            }
            this_ID_4=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current.merge(this_ID_4);
              		
            }
            if ( state.backtracking==0 ) {

              			newLeafNode(this_ID_4, grammarAccess.getIMGREFAccess().getIDTerminalRuleCall_3());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleIMGREF"


    // $ANTLR start "entryRuleAExpression"
    // InternalReqSpec.g:6641:1: entryRuleAExpression returns [EObject current=null] : iv_ruleAExpression= ruleAExpression EOF ;
    public final EObject entryRuleAExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAExpression = null;


        try {
            // InternalReqSpec.g:6641:52: (iv_ruleAExpression= ruleAExpression EOF )
            // InternalReqSpec.g:6642:2: iv_ruleAExpression= ruleAExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAExpressionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleAExpression=ruleAExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAExpression; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAExpression"


    // $ANTLR start "ruleAExpression"
    // InternalReqSpec.g:6648:1: ruleAExpression returns [EObject current=null] : this_AOrExpression_0= ruleAOrExpression ;
    public final EObject ruleAExpression() throws RecognitionException {
        EObject current = null;

        EObject this_AOrExpression_0 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:6654:2: (this_AOrExpression_0= ruleAOrExpression )
            // InternalReqSpec.g:6655:2: this_AOrExpression_0= ruleAOrExpression
            {
            if ( state.backtracking==0 ) {

              		newCompositeNode(grammarAccess.getAExpressionAccess().getAOrExpressionParserRuleCall());
              	
            }
            pushFollow(FollowSets000.FOLLOW_2);
            this_AOrExpression_0=ruleAOrExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              		current = this_AOrExpression_0;
              		afterParserOrEnumRuleCall();
              	
            }

            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAExpression"


    // $ANTLR start "entryRuleAOrExpression"
    // InternalReqSpec.g:6666:1: entryRuleAOrExpression returns [EObject current=null] : iv_ruleAOrExpression= ruleAOrExpression EOF ;
    public final EObject entryRuleAOrExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAOrExpression = null;


        try {
            // InternalReqSpec.g:6666:54: (iv_ruleAOrExpression= ruleAOrExpression EOF )
            // InternalReqSpec.g:6667:2: iv_ruleAOrExpression= ruleAOrExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAOrExpressionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleAOrExpression=ruleAOrExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAOrExpression; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAOrExpression"


    // $ANTLR start "ruleAOrExpression"
    // InternalReqSpec.g:6673:1: ruleAOrExpression returns [EObject current=null] : (this_AAndExpression_0= ruleAAndExpression ( ( ( ( () ( ( ruleOpOr ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpOr ) ) ) ) ( (lv_right_3_0= ruleAAndExpression ) ) )* ) ;
    public final EObject ruleAOrExpression() throws RecognitionException {
        EObject current = null;

        EObject this_AAndExpression_0 = null;

        AntlrDatatypeRuleToken lv_operator_2_0 = null;

        EObject lv_right_3_0 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:6679:2: ( (this_AAndExpression_0= ruleAAndExpression ( ( ( ( () ( ( ruleOpOr ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpOr ) ) ) ) ( (lv_right_3_0= ruleAAndExpression ) ) )* ) )
            // InternalReqSpec.g:6680:2: (this_AAndExpression_0= ruleAAndExpression ( ( ( ( () ( ( ruleOpOr ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpOr ) ) ) ) ( (lv_right_3_0= ruleAAndExpression ) ) )* )
            {
            // InternalReqSpec.g:6680:2: (this_AAndExpression_0= ruleAAndExpression ( ( ( ( () ( ( ruleOpOr ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpOr ) ) ) ) ( (lv_right_3_0= ruleAAndExpression ) ) )* )
            // InternalReqSpec.g:6681:3: this_AAndExpression_0= ruleAAndExpression ( ( ( ( () ( ( ruleOpOr ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpOr ) ) ) ) ( (lv_right_3_0= ruleAAndExpression ) ) )*
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getAOrExpressionAccess().getAAndExpressionParserRuleCall_0());
              		
            }
            pushFollow(FollowSets000.FOLLOW_85);
            this_AAndExpression_0=ruleAAndExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current = this_AAndExpression_0;
              			afterParserOrEnumRuleCall();
              		
            }
            // InternalReqSpec.g:6689:3: ( ( ( ( () ( ( ruleOpOr ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpOr ) ) ) ) ( (lv_right_3_0= ruleAAndExpression ) ) )*
            loop146:
            do {
                int alt146=2;
                int LA146_0 = input.LA(1);

                if ( (LA146_0==83) && (synpred4_InternalReqSpec())) {
                    alt146=1;
                }
                else if ( (LA146_0==84) && (synpred4_InternalReqSpec())) {
                    alt146=1;
                }


                switch (alt146) {
            	case 1 :
            	    // InternalReqSpec.g:6690:4: ( ( ( () ( ( ruleOpOr ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpOr ) ) ) ) ( (lv_right_3_0= ruleAAndExpression ) )
            	    {
            	    // InternalReqSpec.g:6690:4: ( ( ( () ( ( ruleOpOr ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpOr ) ) ) )
            	    // InternalReqSpec.g:6691:5: ( ( () ( ( ruleOpOr ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpOr ) ) )
            	    {
            	    // InternalReqSpec.g:6701:5: ( () ( (lv_operator_2_0= ruleOpOr ) ) )
            	    // InternalReqSpec.g:6702:6: () ( (lv_operator_2_0= ruleOpOr ) )
            	    {
            	    // InternalReqSpec.g:6702:6: ()
            	    // InternalReqSpec.g:6703:7: 
            	    {
            	    if ( state.backtracking==0 ) {

            	      							current = forceCreateModelElementAndSet(
            	      								grammarAccess.getAOrExpressionAccess().getABinaryOperationLeftAction_1_0_0_0(),
            	      								current);
            	      						
            	    }

            	    }

            	    // InternalReqSpec.g:6709:6: ( (lv_operator_2_0= ruleOpOr ) )
            	    // InternalReqSpec.g:6710:7: (lv_operator_2_0= ruleOpOr )
            	    {
            	    // InternalReqSpec.g:6710:7: (lv_operator_2_0= ruleOpOr )
            	    // InternalReqSpec.g:6711:8: lv_operator_2_0= ruleOpOr
            	    {
            	    if ( state.backtracking==0 ) {

            	      								newCompositeNode(grammarAccess.getAOrExpressionAccess().getOperatorOpOrParserRuleCall_1_0_0_1_0());
            	      							
            	    }
            	    pushFollow(FollowSets000.FOLLOW_62);
            	    lv_operator_2_0=ruleOpOr();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      								if (current==null) {
            	      									current = createModelElementForParent(grammarAccess.getAOrExpressionRule());
            	      								}
            	      								set(
            	      									current,
            	      									"operator",
            	      									lv_operator_2_0,
            	      									"org.osate.alisa.common.Common.OpOr");
            	      								afterParserOrEnumRuleCall();
            	      							
            	    }

            	    }


            	    }


            	    }


            	    }

            	    // InternalReqSpec.g:6730:4: ( (lv_right_3_0= ruleAAndExpression ) )
            	    // InternalReqSpec.g:6731:5: (lv_right_3_0= ruleAAndExpression )
            	    {
            	    // InternalReqSpec.g:6731:5: (lv_right_3_0= ruleAAndExpression )
            	    // InternalReqSpec.g:6732:6: lv_right_3_0= ruleAAndExpression
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getAOrExpressionAccess().getRightAAndExpressionParserRuleCall_1_1_0());
            	      					
            	    }
            	    pushFollow(FollowSets000.FOLLOW_85);
            	    lv_right_3_0=ruleAAndExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getAOrExpressionRule());
            	      						}
            	      						set(
            	      							current,
            	      							"right",
            	      							lv_right_3_0,
            	      							"org.osate.alisa.common.Common.AAndExpression");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop146;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAOrExpression"


    // $ANTLR start "entryRuleOpOr"
    // InternalReqSpec.g:6754:1: entryRuleOpOr returns [String current=null] : iv_ruleOpOr= ruleOpOr EOF ;
    public final String entryRuleOpOr() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleOpOr = null;


        try {
            // InternalReqSpec.g:6754:44: (iv_ruleOpOr= ruleOpOr EOF )
            // InternalReqSpec.g:6755:2: iv_ruleOpOr= ruleOpOr EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpOrRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleOpOr=ruleOpOr();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpOr.getText(); 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleOpOr"


    // $ANTLR start "ruleOpOr"
    // InternalReqSpec.g:6761:1: ruleOpOr returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= 'or' | kw= '||' ) ;
    public final AntlrDatatypeRuleToken ruleOpOr() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;


        	enterRule();

        try {
            // InternalReqSpec.g:6767:2: ( (kw= 'or' | kw= '||' ) )
            // InternalReqSpec.g:6768:2: (kw= 'or' | kw= '||' )
            {
            // InternalReqSpec.g:6768:2: (kw= 'or' | kw= '||' )
            int alt147=2;
            int LA147_0 = input.LA(1);

            if ( (LA147_0==83) ) {
                alt147=1;
            }
            else if ( (LA147_0==84) ) {
                alt147=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 147, 0, input);

                throw nvae;
            }
            switch (alt147) {
                case 1 :
                    // InternalReqSpec.g:6769:3: kw= 'or'
                    {
                    kw=(Token)match(input,83,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpOrAccess().getOrKeyword_0());
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalReqSpec.g:6775:3: kw= '||'
                    {
                    kw=(Token)match(input,84,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpOrAccess().getVerticalLineVerticalLineKeyword_1());
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleOpOr"


    // $ANTLR start "entryRuleAAndExpression"
    // InternalReqSpec.g:6784:1: entryRuleAAndExpression returns [EObject current=null] : iv_ruleAAndExpression= ruleAAndExpression EOF ;
    public final EObject entryRuleAAndExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAAndExpression = null;


        try {
            // InternalReqSpec.g:6784:55: (iv_ruleAAndExpression= ruleAAndExpression EOF )
            // InternalReqSpec.g:6785:2: iv_ruleAAndExpression= ruleAAndExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAAndExpressionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleAAndExpression=ruleAAndExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAAndExpression; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAAndExpression"


    // $ANTLR start "ruleAAndExpression"
    // InternalReqSpec.g:6791:1: ruleAAndExpression returns [EObject current=null] : (this_AEqualityExpression_0= ruleAEqualityExpression ( ( ( ( () ( ( ruleOpAnd ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpAnd ) ) ) ) ( (lv_right_3_0= ruleAEqualityExpression ) ) )* ) ;
    public final EObject ruleAAndExpression() throws RecognitionException {
        EObject current = null;

        EObject this_AEqualityExpression_0 = null;

        AntlrDatatypeRuleToken lv_operator_2_0 = null;

        EObject lv_right_3_0 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:6797:2: ( (this_AEqualityExpression_0= ruleAEqualityExpression ( ( ( ( () ( ( ruleOpAnd ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpAnd ) ) ) ) ( (lv_right_3_0= ruleAEqualityExpression ) ) )* ) )
            // InternalReqSpec.g:6798:2: (this_AEqualityExpression_0= ruleAEqualityExpression ( ( ( ( () ( ( ruleOpAnd ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpAnd ) ) ) ) ( (lv_right_3_0= ruleAEqualityExpression ) ) )* )
            {
            // InternalReqSpec.g:6798:2: (this_AEqualityExpression_0= ruleAEqualityExpression ( ( ( ( () ( ( ruleOpAnd ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpAnd ) ) ) ) ( (lv_right_3_0= ruleAEqualityExpression ) ) )* )
            // InternalReqSpec.g:6799:3: this_AEqualityExpression_0= ruleAEqualityExpression ( ( ( ( () ( ( ruleOpAnd ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpAnd ) ) ) ) ( (lv_right_3_0= ruleAEqualityExpression ) ) )*
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getAAndExpressionAccess().getAEqualityExpressionParserRuleCall_0());
              		
            }
            pushFollow(FollowSets000.FOLLOW_86);
            this_AEqualityExpression_0=ruleAEqualityExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current = this_AEqualityExpression_0;
              			afterParserOrEnumRuleCall();
              		
            }
            // InternalReqSpec.g:6807:3: ( ( ( ( () ( ( ruleOpAnd ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpAnd ) ) ) ) ( (lv_right_3_0= ruleAEqualityExpression ) ) )*
            loop148:
            do {
                int alt148=2;
                int LA148_0 = input.LA(1);

                if ( (LA148_0==85) && (synpred5_InternalReqSpec())) {
                    alt148=1;
                }
                else if ( (LA148_0==86) && (synpred5_InternalReqSpec())) {
                    alt148=1;
                }


                switch (alt148) {
            	case 1 :
            	    // InternalReqSpec.g:6808:4: ( ( ( () ( ( ruleOpAnd ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpAnd ) ) ) ) ( (lv_right_3_0= ruleAEqualityExpression ) )
            	    {
            	    // InternalReqSpec.g:6808:4: ( ( ( () ( ( ruleOpAnd ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpAnd ) ) ) )
            	    // InternalReqSpec.g:6809:5: ( ( () ( ( ruleOpAnd ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpAnd ) ) )
            	    {
            	    // InternalReqSpec.g:6819:5: ( () ( (lv_operator_2_0= ruleOpAnd ) ) )
            	    // InternalReqSpec.g:6820:6: () ( (lv_operator_2_0= ruleOpAnd ) )
            	    {
            	    // InternalReqSpec.g:6820:6: ()
            	    // InternalReqSpec.g:6821:7: 
            	    {
            	    if ( state.backtracking==0 ) {

            	      							current = forceCreateModelElementAndSet(
            	      								grammarAccess.getAAndExpressionAccess().getABinaryOperationLeftAction_1_0_0_0(),
            	      								current);
            	      						
            	    }

            	    }

            	    // InternalReqSpec.g:6827:6: ( (lv_operator_2_0= ruleOpAnd ) )
            	    // InternalReqSpec.g:6828:7: (lv_operator_2_0= ruleOpAnd )
            	    {
            	    // InternalReqSpec.g:6828:7: (lv_operator_2_0= ruleOpAnd )
            	    // InternalReqSpec.g:6829:8: lv_operator_2_0= ruleOpAnd
            	    {
            	    if ( state.backtracking==0 ) {

            	      								newCompositeNode(grammarAccess.getAAndExpressionAccess().getOperatorOpAndParserRuleCall_1_0_0_1_0());
            	      							
            	    }
            	    pushFollow(FollowSets000.FOLLOW_62);
            	    lv_operator_2_0=ruleOpAnd();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      								if (current==null) {
            	      									current = createModelElementForParent(grammarAccess.getAAndExpressionRule());
            	      								}
            	      								set(
            	      									current,
            	      									"operator",
            	      									lv_operator_2_0,
            	      									"org.osate.alisa.common.Common.OpAnd");
            	      								afterParserOrEnumRuleCall();
            	      							
            	    }

            	    }


            	    }


            	    }


            	    }

            	    // InternalReqSpec.g:6848:4: ( (lv_right_3_0= ruleAEqualityExpression ) )
            	    // InternalReqSpec.g:6849:5: (lv_right_3_0= ruleAEqualityExpression )
            	    {
            	    // InternalReqSpec.g:6849:5: (lv_right_3_0= ruleAEqualityExpression )
            	    // InternalReqSpec.g:6850:6: lv_right_3_0= ruleAEqualityExpression
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getAAndExpressionAccess().getRightAEqualityExpressionParserRuleCall_1_1_0());
            	      					
            	    }
            	    pushFollow(FollowSets000.FOLLOW_86);
            	    lv_right_3_0=ruleAEqualityExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getAAndExpressionRule());
            	      						}
            	      						set(
            	      							current,
            	      							"right",
            	      							lv_right_3_0,
            	      							"org.osate.alisa.common.Common.AEqualityExpression");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop148;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAAndExpression"


    // $ANTLR start "entryRuleOpAnd"
    // InternalReqSpec.g:6872:1: entryRuleOpAnd returns [String current=null] : iv_ruleOpAnd= ruleOpAnd EOF ;
    public final String entryRuleOpAnd() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleOpAnd = null;


        try {
            // InternalReqSpec.g:6872:45: (iv_ruleOpAnd= ruleOpAnd EOF )
            // InternalReqSpec.g:6873:2: iv_ruleOpAnd= ruleOpAnd EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpAndRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleOpAnd=ruleOpAnd();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpAnd.getText(); 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleOpAnd"


    // $ANTLR start "ruleOpAnd"
    // InternalReqSpec.g:6879:1: ruleOpAnd returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= 'and' | kw= '&&' ) ;
    public final AntlrDatatypeRuleToken ruleOpAnd() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;


        	enterRule();

        try {
            // InternalReqSpec.g:6885:2: ( (kw= 'and' | kw= '&&' ) )
            // InternalReqSpec.g:6886:2: (kw= 'and' | kw= '&&' )
            {
            // InternalReqSpec.g:6886:2: (kw= 'and' | kw= '&&' )
            int alt149=2;
            int LA149_0 = input.LA(1);

            if ( (LA149_0==85) ) {
                alt149=1;
            }
            else if ( (LA149_0==86) ) {
                alt149=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 149, 0, input);

                throw nvae;
            }
            switch (alt149) {
                case 1 :
                    // InternalReqSpec.g:6887:3: kw= 'and'
                    {
                    kw=(Token)match(input,85,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpAndAccess().getAndKeyword_0());
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalReqSpec.g:6893:3: kw= '&&'
                    {
                    kw=(Token)match(input,86,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpAndAccess().getAmpersandAmpersandKeyword_1());
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleOpAnd"


    // $ANTLR start "entryRuleAEqualityExpression"
    // InternalReqSpec.g:6902:1: entryRuleAEqualityExpression returns [EObject current=null] : iv_ruleAEqualityExpression= ruleAEqualityExpression EOF ;
    public final EObject entryRuleAEqualityExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAEqualityExpression = null;


        try {
            // InternalReqSpec.g:6902:60: (iv_ruleAEqualityExpression= ruleAEqualityExpression EOF )
            // InternalReqSpec.g:6903:2: iv_ruleAEqualityExpression= ruleAEqualityExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAEqualityExpressionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleAEqualityExpression=ruleAEqualityExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAEqualityExpression; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAEqualityExpression"


    // $ANTLR start "ruleAEqualityExpression"
    // InternalReqSpec.g:6909:1: ruleAEqualityExpression returns [EObject current=null] : (this_ARelationalExpression_0= ruleARelationalExpression ( ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpEquality ) ) ) ) ( (lv_right_3_0= ruleARelationalExpression ) ) )* ) ;
    public final EObject ruleAEqualityExpression() throws RecognitionException {
        EObject current = null;

        EObject this_ARelationalExpression_0 = null;

        AntlrDatatypeRuleToken lv_operator_2_0 = null;

        EObject lv_right_3_0 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:6915:2: ( (this_ARelationalExpression_0= ruleARelationalExpression ( ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpEquality ) ) ) ) ( (lv_right_3_0= ruleARelationalExpression ) ) )* ) )
            // InternalReqSpec.g:6916:2: (this_ARelationalExpression_0= ruleARelationalExpression ( ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpEquality ) ) ) ) ( (lv_right_3_0= ruleARelationalExpression ) ) )* )
            {
            // InternalReqSpec.g:6916:2: (this_ARelationalExpression_0= ruleARelationalExpression ( ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpEquality ) ) ) ) ( (lv_right_3_0= ruleARelationalExpression ) ) )* )
            // InternalReqSpec.g:6917:3: this_ARelationalExpression_0= ruleARelationalExpression ( ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpEquality ) ) ) ) ( (lv_right_3_0= ruleARelationalExpression ) ) )*
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getAEqualityExpressionAccess().getARelationalExpressionParserRuleCall_0());
              		
            }
            pushFollow(FollowSets000.FOLLOW_87);
            this_ARelationalExpression_0=ruleARelationalExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current = this_ARelationalExpression_0;
              			afterParserOrEnumRuleCall();
              		
            }
            // InternalReqSpec.g:6925:3: ( ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpEquality ) ) ) ) ( (lv_right_3_0= ruleARelationalExpression ) ) )*
            loop150:
            do {
                int alt150=2;
                int LA150_0 = input.LA(1);

                if ( (LA150_0==87) && (synpred6_InternalReqSpec())) {
                    alt150=1;
                }
                else if ( (LA150_0==88) && (synpred6_InternalReqSpec())) {
                    alt150=1;
                }


                switch (alt150) {
            	case 1 :
            	    // InternalReqSpec.g:6926:4: ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpEquality ) ) ) ) ( (lv_right_3_0= ruleARelationalExpression ) )
            	    {
            	    // InternalReqSpec.g:6926:4: ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpEquality ) ) ) )
            	    // InternalReqSpec.g:6927:5: ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpEquality ) ) )
            	    {
            	    // InternalReqSpec.g:6937:5: ( () ( (lv_operator_2_0= ruleOpEquality ) ) )
            	    // InternalReqSpec.g:6938:6: () ( (lv_operator_2_0= ruleOpEquality ) )
            	    {
            	    // InternalReqSpec.g:6938:6: ()
            	    // InternalReqSpec.g:6939:7: 
            	    {
            	    if ( state.backtracking==0 ) {

            	      							current = forceCreateModelElementAndSet(
            	      								grammarAccess.getAEqualityExpressionAccess().getABinaryOperationLeftAction_1_0_0_0(),
            	      								current);
            	      						
            	    }

            	    }

            	    // InternalReqSpec.g:6945:6: ( (lv_operator_2_0= ruleOpEquality ) )
            	    // InternalReqSpec.g:6946:7: (lv_operator_2_0= ruleOpEquality )
            	    {
            	    // InternalReqSpec.g:6946:7: (lv_operator_2_0= ruleOpEquality )
            	    // InternalReqSpec.g:6947:8: lv_operator_2_0= ruleOpEquality
            	    {
            	    if ( state.backtracking==0 ) {

            	      								newCompositeNode(grammarAccess.getAEqualityExpressionAccess().getOperatorOpEqualityParserRuleCall_1_0_0_1_0());
            	      							
            	    }
            	    pushFollow(FollowSets000.FOLLOW_62);
            	    lv_operator_2_0=ruleOpEquality();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      								if (current==null) {
            	      									current = createModelElementForParent(grammarAccess.getAEqualityExpressionRule());
            	      								}
            	      								set(
            	      									current,
            	      									"operator",
            	      									lv_operator_2_0,
            	      									"org.osate.alisa.common.Common.OpEquality");
            	      								afterParserOrEnumRuleCall();
            	      							
            	    }

            	    }


            	    }


            	    }


            	    }

            	    // InternalReqSpec.g:6966:4: ( (lv_right_3_0= ruleARelationalExpression ) )
            	    // InternalReqSpec.g:6967:5: (lv_right_3_0= ruleARelationalExpression )
            	    {
            	    // InternalReqSpec.g:6967:5: (lv_right_3_0= ruleARelationalExpression )
            	    // InternalReqSpec.g:6968:6: lv_right_3_0= ruleARelationalExpression
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getAEqualityExpressionAccess().getRightARelationalExpressionParserRuleCall_1_1_0());
            	      					
            	    }
            	    pushFollow(FollowSets000.FOLLOW_87);
            	    lv_right_3_0=ruleARelationalExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getAEqualityExpressionRule());
            	      						}
            	      						set(
            	      							current,
            	      							"right",
            	      							lv_right_3_0,
            	      							"org.osate.alisa.common.Common.ARelationalExpression");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop150;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAEqualityExpression"


    // $ANTLR start "entryRuleOpEquality"
    // InternalReqSpec.g:6990:1: entryRuleOpEquality returns [String current=null] : iv_ruleOpEquality= ruleOpEquality EOF ;
    public final String entryRuleOpEquality() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleOpEquality = null;


        try {
            // InternalReqSpec.g:6990:50: (iv_ruleOpEquality= ruleOpEquality EOF )
            // InternalReqSpec.g:6991:2: iv_ruleOpEquality= ruleOpEquality EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpEqualityRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleOpEquality=ruleOpEquality();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpEquality.getText(); 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleOpEquality"


    // $ANTLR start "ruleOpEquality"
    // InternalReqSpec.g:6997:1: ruleOpEquality returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= '==' | kw= '!=' ) ;
    public final AntlrDatatypeRuleToken ruleOpEquality() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;


        	enterRule();

        try {
            // InternalReqSpec.g:7003:2: ( (kw= '==' | kw= '!=' ) )
            // InternalReqSpec.g:7004:2: (kw= '==' | kw= '!=' )
            {
            // InternalReqSpec.g:7004:2: (kw= '==' | kw= '!=' )
            int alt151=2;
            int LA151_0 = input.LA(1);

            if ( (LA151_0==87) ) {
                alt151=1;
            }
            else if ( (LA151_0==88) ) {
                alt151=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 151, 0, input);

                throw nvae;
            }
            switch (alt151) {
                case 1 :
                    // InternalReqSpec.g:7005:3: kw= '=='
                    {
                    kw=(Token)match(input,87,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpEqualityAccess().getEqualsSignEqualsSignKeyword_0());
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalReqSpec.g:7011:3: kw= '!='
                    {
                    kw=(Token)match(input,88,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpEqualityAccess().getExclamationMarkEqualsSignKeyword_1());
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleOpEquality"


    // $ANTLR start "entryRuleARelationalExpression"
    // InternalReqSpec.g:7020:1: entryRuleARelationalExpression returns [EObject current=null] : iv_ruleARelationalExpression= ruleARelationalExpression EOF ;
    public final EObject entryRuleARelationalExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleARelationalExpression = null;


        try {
            // InternalReqSpec.g:7020:62: (iv_ruleARelationalExpression= ruleARelationalExpression EOF )
            // InternalReqSpec.g:7021:2: iv_ruleARelationalExpression= ruleARelationalExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getARelationalExpressionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleARelationalExpression=ruleARelationalExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleARelationalExpression; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleARelationalExpression"


    // $ANTLR start "ruleARelationalExpression"
    // InternalReqSpec.g:7027:1: ruleARelationalExpression returns [EObject current=null] : (this_AAdditiveExpression_0= ruleAAdditiveExpression ( ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpCompare ) ) ) ) ( (lv_right_3_0= ruleAAdditiveExpression ) ) )* ) ;
    public final EObject ruleARelationalExpression() throws RecognitionException {
        EObject current = null;

        EObject this_AAdditiveExpression_0 = null;

        AntlrDatatypeRuleToken lv_operator_2_0 = null;

        EObject lv_right_3_0 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:7033:2: ( (this_AAdditiveExpression_0= ruleAAdditiveExpression ( ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpCompare ) ) ) ) ( (lv_right_3_0= ruleAAdditiveExpression ) ) )* ) )
            // InternalReqSpec.g:7034:2: (this_AAdditiveExpression_0= ruleAAdditiveExpression ( ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpCompare ) ) ) ) ( (lv_right_3_0= ruleAAdditiveExpression ) ) )* )
            {
            // InternalReqSpec.g:7034:2: (this_AAdditiveExpression_0= ruleAAdditiveExpression ( ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpCompare ) ) ) ) ( (lv_right_3_0= ruleAAdditiveExpression ) ) )* )
            // InternalReqSpec.g:7035:3: this_AAdditiveExpression_0= ruleAAdditiveExpression ( ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpCompare ) ) ) ) ( (lv_right_3_0= ruleAAdditiveExpression ) ) )*
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getARelationalExpressionAccess().getAAdditiveExpressionParserRuleCall_0());
              		
            }
            pushFollow(FollowSets000.FOLLOW_88);
            this_AAdditiveExpression_0=ruleAAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current = this_AAdditiveExpression_0;
              			afterParserOrEnumRuleCall();
              		
            }
            // InternalReqSpec.g:7043:3: ( ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpCompare ) ) ) ) ( (lv_right_3_0= ruleAAdditiveExpression ) ) )*
            loop152:
            do {
                int alt152=2;
                int LA152_0 = input.LA(1);

                if ( (LA152_0==89) && (synpred7_InternalReqSpec())) {
                    alt152=1;
                }
                else if ( (LA152_0==90) && (synpred7_InternalReqSpec())) {
                    alt152=1;
                }
                else if ( (LA152_0==91) && (synpred7_InternalReqSpec())) {
                    alt152=1;
                }
                else if ( (LA152_0==92) && (synpred7_InternalReqSpec())) {
                    alt152=1;
                }
                else if ( (LA152_0==93) && (synpred7_InternalReqSpec())) {
                    alt152=1;
                }


                switch (alt152) {
            	case 1 :
            	    // InternalReqSpec.g:7044:4: ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpCompare ) ) ) ) ( (lv_right_3_0= ruleAAdditiveExpression ) )
            	    {
            	    // InternalReqSpec.g:7044:4: ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpCompare ) ) ) )
            	    // InternalReqSpec.g:7045:5: ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpCompare ) ) )
            	    {
            	    // InternalReqSpec.g:7055:5: ( () ( (lv_operator_2_0= ruleOpCompare ) ) )
            	    // InternalReqSpec.g:7056:6: () ( (lv_operator_2_0= ruleOpCompare ) )
            	    {
            	    // InternalReqSpec.g:7056:6: ()
            	    // InternalReqSpec.g:7057:7: 
            	    {
            	    if ( state.backtracking==0 ) {

            	      							current = forceCreateModelElementAndSet(
            	      								grammarAccess.getARelationalExpressionAccess().getABinaryOperationLeftAction_1_0_0_0(),
            	      								current);
            	      						
            	    }

            	    }

            	    // InternalReqSpec.g:7063:6: ( (lv_operator_2_0= ruleOpCompare ) )
            	    // InternalReqSpec.g:7064:7: (lv_operator_2_0= ruleOpCompare )
            	    {
            	    // InternalReqSpec.g:7064:7: (lv_operator_2_0= ruleOpCompare )
            	    // InternalReqSpec.g:7065:8: lv_operator_2_0= ruleOpCompare
            	    {
            	    if ( state.backtracking==0 ) {

            	      								newCompositeNode(grammarAccess.getARelationalExpressionAccess().getOperatorOpCompareParserRuleCall_1_0_0_1_0());
            	      							
            	    }
            	    pushFollow(FollowSets000.FOLLOW_62);
            	    lv_operator_2_0=ruleOpCompare();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      								if (current==null) {
            	      									current = createModelElementForParent(grammarAccess.getARelationalExpressionRule());
            	      								}
            	      								set(
            	      									current,
            	      									"operator",
            	      									lv_operator_2_0,
            	      									"org.osate.alisa.common.Common.OpCompare");
            	      								afterParserOrEnumRuleCall();
            	      							
            	    }

            	    }


            	    }


            	    }


            	    }

            	    // InternalReqSpec.g:7084:4: ( (lv_right_3_0= ruleAAdditiveExpression ) )
            	    // InternalReqSpec.g:7085:5: (lv_right_3_0= ruleAAdditiveExpression )
            	    {
            	    // InternalReqSpec.g:7085:5: (lv_right_3_0= ruleAAdditiveExpression )
            	    // InternalReqSpec.g:7086:6: lv_right_3_0= ruleAAdditiveExpression
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getARelationalExpressionAccess().getRightAAdditiveExpressionParserRuleCall_1_1_0());
            	      					
            	    }
            	    pushFollow(FollowSets000.FOLLOW_88);
            	    lv_right_3_0=ruleAAdditiveExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getARelationalExpressionRule());
            	      						}
            	      						set(
            	      							current,
            	      							"right",
            	      							lv_right_3_0,
            	      							"org.osate.alisa.common.Common.AAdditiveExpression");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop152;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleARelationalExpression"


    // $ANTLR start "entryRuleOpCompare"
    // InternalReqSpec.g:7108:1: entryRuleOpCompare returns [String current=null] : iv_ruleOpCompare= ruleOpCompare EOF ;
    public final String entryRuleOpCompare() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleOpCompare = null;


        try {
            // InternalReqSpec.g:7108:49: (iv_ruleOpCompare= ruleOpCompare EOF )
            // InternalReqSpec.g:7109:2: iv_ruleOpCompare= ruleOpCompare EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpCompareRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleOpCompare=ruleOpCompare();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpCompare.getText(); 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleOpCompare"


    // $ANTLR start "ruleOpCompare"
    // InternalReqSpec.g:7115:1: ruleOpCompare returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= '>=' | kw= '<=' | kw= '>' | kw= '<' | kw= '><' ) ;
    public final AntlrDatatypeRuleToken ruleOpCompare() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;


        	enterRule();

        try {
            // InternalReqSpec.g:7121:2: ( (kw= '>=' | kw= '<=' | kw= '>' | kw= '<' | kw= '><' ) )
            // InternalReqSpec.g:7122:2: (kw= '>=' | kw= '<=' | kw= '>' | kw= '<' | kw= '><' )
            {
            // InternalReqSpec.g:7122:2: (kw= '>=' | kw= '<=' | kw= '>' | kw= '<' | kw= '><' )
            int alt153=5;
            switch ( input.LA(1) ) {
            case 89:
                {
                alt153=1;
                }
                break;
            case 90:
                {
                alt153=2;
                }
                break;
            case 91:
                {
                alt153=3;
                }
                break;
            case 92:
                {
                alt153=4;
                }
                break;
            case 93:
                {
                alt153=5;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 153, 0, input);

                throw nvae;
            }

            switch (alt153) {
                case 1 :
                    // InternalReqSpec.g:7123:3: kw= '>='
                    {
                    kw=(Token)match(input,89,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpCompareAccess().getGreaterThanSignEqualsSignKeyword_0());
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalReqSpec.g:7129:3: kw= '<='
                    {
                    kw=(Token)match(input,90,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpCompareAccess().getLessThanSignEqualsSignKeyword_1());
                      		
                    }

                    }
                    break;
                case 3 :
                    // InternalReqSpec.g:7135:3: kw= '>'
                    {
                    kw=(Token)match(input,91,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpCompareAccess().getGreaterThanSignKeyword_2());
                      		
                    }

                    }
                    break;
                case 4 :
                    // InternalReqSpec.g:7141:3: kw= '<'
                    {
                    kw=(Token)match(input,92,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpCompareAccess().getLessThanSignKeyword_3());
                      		
                    }

                    }
                    break;
                case 5 :
                    // InternalReqSpec.g:7147:3: kw= '><'
                    {
                    kw=(Token)match(input,93,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpCompareAccess().getGreaterThanSignLessThanSignKeyword_4());
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleOpCompare"


    // $ANTLR start "entryRuleAAdditiveExpression"
    // InternalReqSpec.g:7156:1: entryRuleAAdditiveExpression returns [EObject current=null] : iv_ruleAAdditiveExpression= ruleAAdditiveExpression EOF ;
    public final EObject entryRuleAAdditiveExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAAdditiveExpression = null;


        try {
            // InternalReqSpec.g:7156:60: (iv_ruleAAdditiveExpression= ruleAAdditiveExpression EOF )
            // InternalReqSpec.g:7157:2: iv_ruleAAdditiveExpression= ruleAAdditiveExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAAdditiveExpressionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleAAdditiveExpression=ruleAAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAAdditiveExpression; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAAdditiveExpression"


    // $ANTLR start "ruleAAdditiveExpression"
    // InternalReqSpec.g:7163:1: ruleAAdditiveExpression returns [EObject current=null] : (this_AMultiplicativeExpression_0= ruleAMultiplicativeExpression ( ( ( ( () ( ( ruleOpAdd ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpAdd ) ) ) ) ( (lv_right_3_0= ruleAMultiplicativeExpression ) ) )* ) ;
    public final EObject ruleAAdditiveExpression() throws RecognitionException {
        EObject current = null;

        EObject this_AMultiplicativeExpression_0 = null;

        AntlrDatatypeRuleToken lv_operator_2_0 = null;

        EObject lv_right_3_0 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:7169:2: ( (this_AMultiplicativeExpression_0= ruleAMultiplicativeExpression ( ( ( ( () ( ( ruleOpAdd ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpAdd ) ) ) ) ( (lv_right_3_0= ruleAMultiplicativeExpression ) ) )* ) )
            // InternalReqSpec.g:7170:2: (this_AMultiplicativeExpression_0= ruleAMultiplicativeExpression ( ( ( ( () ( ( ruleOpAdd ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpAdd ) ) ) ) ( (lv_right_3_0= ruleAMultiplicativeExpression ) ) )* )
            {
            // InternalReqSpec.g:7170:2: (this_AMultiplicativeExpression_0= ruleAMultiplicativeExpression ( ( ( ( () ( ( ruleOpAdd ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpAdd ) ) ) ) ( (lv_right_3_0= ruleAMultiplicativeExpression ) ) )* )
            // InternalReqSpec.g:7171:3: this_AMultiplicativeExpression_0= ruleAMultiplicativeExpression ( ( ( ( () ( ( ruleOpAdd ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpAdd ) ) ) ) ( (lv_right_3_0= ruleAMultiplicativeExpression ) ) )*
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getAAdditiveExpressionAccess().getAMultiplicativeExpressionParserRuleCall_0());
              		
            }
            pushFollow(FollowSets000.FOLLOW_89);
            this_AMultiplicativeExpression_0=ruleAMultiplicativeExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current = this_AMultiplicativeExpression_0;
              			afterParserOrEnumRuleCall();
              		
            }
            // InternalReqSpec.g:7179:3: ( ( ( ( () ( ( ruleOpAdd ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpAdd ) ) ) ) ( (lv_right_3_0= ruleAMultiplicativeExpression ) ) )*
            loop154:
            do {
                int alt154=2;
                int LA154_0 = input.LA(1);

                if ( (LA154_0==94) && (synpred8_InternalReqSpec())) {
                    alt154=1;
                }
                else if ( (LA154_0==95) && (synpred8_InternalReqSpec())) {
                    alt154=1;
                }


                switch (alt154) {
            	case 1 :
            	    // InternalReqSpec.g:7180:4: ( ( ( () ( ( ruleOpAdd ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpAdd ) ) ) ) ( (lv_right_3_0= ruleAMultiplicativeExpression ) )
            	    {
            	    // InternalReqSpec.g:7180:4: ( ( ( () ( ( ruleOpAdd ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpAdd ) ) ) )
            	    // InternalReqSpec.g:7181:5: ( ( () ( ( ruleOpAdd ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpAdd ) ) )
            	    {
            	    // InternalReqSpec.g:7191:5: ( () ( (lv_operator_2_0= ruleOpAdd ) ) )
            	    // InternalReqSpec.g:7192:6: () ( (lv_operator_2_0= ruleOpAdd ) )
            	    {
            	    // InternalReqSpec.g:7192:6: ()
            	    // InternalReqSpec.g:7193:7: 
            	    {
            	    if ( state.backtracking==0 ) {

            	      							current = forceCreateModelElementAndSet(
            	      								grammarAccess.getAAdditiveExpressionAccess().getABinaryOperationLeftAction_1_0_0_0(),
            	      								current);
            	      						
            	    }

            	    }

            	    // InternalReqSpec.g:7199:6: ( (lv_operator_2_0= ruleOpAdd ) )
            	    // InternalReqSpec.g:7200:7: (lv_operator_2_0= ruleOpAdd )
            	    {
            	    // InternalReqSpec.g:7200:7: (lv_operator_2_0= ruleOpAdd )
            	    // InternalReqSpec.g:7201:8: lv_operator_2_0= ruleOpAdd
            	    {
            	    if ( state.backtracking==0 ) {

            	      								newCompositeNode(grammarAccess.getAAdditiveExpressionAccess().getOperatorOpAddParserRuleCall_1_0_0_1_0());
            	      							
            	    }
            	    pushFollow(FollowSets000.FOLLOW_62);
            	    lv_operator_2_0=ruleOpAdd();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      								if (current==null) {
            	      									current = createModelElementForParent(grammarAccess.getAAdditiveExpressionRule());
            	      								}
            	      								set(
            	      									current,
            	      									"operator",
            	      									lv_operator_2_0,
            	      									"org.osate.alisa.common.Common.OpAdd");
            	      								afterParserOrEnumRuleCall();
            	      							
            	    }

            	    }


            	    }


            	    }


            	    }

            	    // InternalReqSpec.g:7220:4: ( (lv_right_3_0= ruleAMultiplicativeExpression ) )
            	    // InternalReqSpec.g:7221:5: (lv_right_3_0= ruleAMultiplicativeExpression )
            	    {
            	    // InternalReqSpec.g:7221:5: (lv_right_3_0= ruleAMultiplicativeExpression )
            	    // InternalReqSpec.g:7222:6: lv_right_3_0= ruleAMultiplicativeExpression
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getAAdditiveExpressionAccess().getRightAMultiplicativeExpressionParserRuleCall_1_1_0());
            	      					
            	    }
            	    pushFollow(FollowSets000.FOLLOW_89);
            	    lv_right_3_0=ruleAMultiplicativeExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getAAdditiveExpressionRule());
            	      						}
            	      						set(
            	      							current,
            	      							"right",
            	      							lv_right_3_0,
            	      							"org.osate.alisa.common.Common.AMultiplicativeExpression");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop154;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAAdditiveExpression"


    // $ANTLR start "entryRuleOpAdd"
    // InternalReqSpec.g:7244:1: entryRuleOpAdd returns [String current=null] : iv_ruleOpAdd= ruleOpAdd EOF ;
    public final String entryRuleOpAdd() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleOpAdd = null;


        try {
            // InternalReqSpec.g:7244:45: (iv_ruleOpAdd= ruleOpAdd EOF )
            // InternalReqSpec.g:7245:2: iv_ruleOpAdd= ruleOpAdd EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpAddRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleOpAdd=ruleOpAdd();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpAdd.getText(); 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleOpAdd"


    // $ANTLR start "ruleOpAdd"
    // InternalReqSpec.g:7251:1: ruleOpAdd returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= '+' | kw= '-' ) ;
    public final AntlrDatatypeRuleToken ruleOpAdd() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;


        	enterRule();

        try {
            // InternalReqSpec.g:7257:2: ( (kw= '+' | kw= '-' ) )
            // InternalReqSpec.g:7258:2: (kw= '+' | kw= '-' )
            {
            // InternalReqSpec.g:7258:2: (kw= '+' | kw= '-' )
            int alt155=2;
            int LA155_0 = input.LA(1);

            if ( (LA155_0==94) ) {
                alt155=1;
            }
            else if ( (LA155_0==95) ) {
                alt155=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 155, 0, input);

                throw nvae;
            }
            switch (alt155) {
                case 1 :
                    // InternalReqSpec.g:7259:3: kw= '+'
                    {
                    kw=(Token)match(input,94,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpAddAccess().getPlusSignKeyword_0());
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalReqSpec.g:7265:3: kw= '-'
                    {
                    kw=(Token)match(input,95,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpAddAccess().getHyphenMinusKeyword_1());
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleOpAdd"


    // $ANTLR start "entryRuleAMultiplicativeExpression"
    // InternalReqSpec.g:7274:1: entryRuleAMultiplicativeExpression returns [EObject current=null] : iv_ruleAMultiplicativeExpression= ruleAMultiplicativeExpression EOF ;
    public final EObject entryRuleAMultiplicativeExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAMultiplicativeExpression = null;


        try {
            // InternalReqSpec.g:7274:66: (iv_ruleAMultiplicativeExpression= ruleAMultiplicativeExpression EOF )
            // InternalReqSpec.g:7275:2: iv_ruleAMultiplicativeExpression= ruleAMultiplicativeExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAMultiplicativeExpressionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleAMultiplicativeExpression=ruleAMultiplicativeExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAMultiplicativeExpression; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAMultiplicativeExpression"


    // $ANTLR start "ruleAMultiplicativeExpression"
    // InternalReqSpec.g:7281:1: ruleAMultiplicativeExpression returns [EObject current=null] : (this_AUnaryOperation_0= ruleAUnaryOperation ( ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpMulti ) ) ) ) ( (lv_right_3_0= ruleAUnaryOperation ) ) )* ) ;
    public final EObject ruleAMultiplicativeExpression() throws RecognitionException {
        EObject current = null;

        EObject this_AUnaryOperation_0 = null;

        AntlrDatatypeRuleToken lv_operator_2_0 = null;

        EObject lv_right_3_0 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:7287:2: ( (this_AUnaryOperation_0= ruleAUnaryOperation ( ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpMulti ) ) ) ) ( (lv_right_3_0= ruleAUnaryOperation ) ) )* ) )
            // InternalReqSpec.g:7288:2: (this_AUnaryOperation_0= ruleAUnaryOperation ( ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpMulti ) ) ) ) ( (lv_right_3_0= ruleAUnaryOperation ) ) )* )
            {
            // InternalReqSpec.g:7288:2: (this_AUnaryOperation_0= ruleAUnaryOperation ( ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpMulti ) ) ) ) ( (lv_right_3_0= ruleAUnaryOperation ) ) )* )
            // InternalReqSpec.g:7289:3: this_AUnaryOperation_0= ruleAUnaryOperation ( ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpMulti ) ) ) ) ( (lv_right_3_0= ruleAUnaryOperation ) ) )*
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getAMultiplicativeExpressionAccess().getAUnaryOperationParserRuleCall_0());
              		
            }
            pushFollow(FollowSets000.FOLLOW_90);
            this_AUnaryOperation_0=ruleAUnaryOperation();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current = this_AUnaryOperation_0;
              			afterParserOrEnumRuleCall();
              		
            }
            // InternalReqSpec.g:7297:3: ( ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpMulti ) ) ) ) ( (lv_right_3_0= ruleAUnaryOperation ) ) )*
            loop156:
            do {
                int alt156=2;
                int LA156_0 = input.LA(1);

                if ( (LA156_0==96) && (synpred9_InternalReqSpec())) {
                    alt156=1;
                }
                else if ( (LA156_0==64) && (synpred9_InternalReqSpec())) {
                    alt156=1;
                }
                else if ( (LA156_0==97) && (synpred9_InternalReqSpec())) {
                    alt156=1;
                }
                else if ( (LA156_0==98) && (synpred9_InternalReqSpec())) {
                    alt156=1;
                }


                switch (alt156) {
            	case 1 :
            	    // InternalReqSpec.g:7298:4: ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpMulti ) ) ) ) ( (lv_right_3_0= ruleAUnaryOperation ) )
            	    {
            	    // InternalReqSpec.g:7298:4: ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpMulti ) ) ) )
            	    // InternalReqSpec.g:7299:5: ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( (lv_operator_2_0= ruleOpMulti ) ) )
            	    {
            	    // InternalReqSpec.g:7309:5: ( () ( (lv_operator_2_0= ruleOpMulti ) ) )
            	    // InternalReqSpec.g:7310:6: () ( (lv_operator_2_0= ruleOpMulti ) )
            	    {
            	    // InternalReqSpec.g:7310:6: ()
            	    // InternalReqSpec.g:7311:7: 
            	    {
            	    if ( state.backtracking==0 ) {

            	      							current = forceCreateModelElementAndSet(
            	      								grammarAccess.getAMultiplicativeExpressionAccess().getABinaryOperationLeftAction_1_0_0_0(),
            	      								current);
            	      						
            	    }

            	    }

            	    // InternalReqSpec.g:7317:6: ( (lv_operator_2_0= ruleOpMulti ) )
            	    // InternalReqSpec.g:7318:7: (lv_operator_2_0= ruleOpMulti )
            	    {
            	    // InternalReqSpec.g:7318:7: (lv_operator_2_0= ruleOpMulti )
            	    // InternalReqSpec.g:7319:8: lv_operator_2_0= ruleOpMulti
            	    {
            	    if ( state.backtracking==0 ) {

            	      								newCompositeNode(grammarAccess.getAMultiplicativeExpressionAccess().getOperatorOpMultiParserRuleCall_1_0_0_1_0());
            	      							
            	    }
            	    pushFollow(FollowSets000.FOLLOW_62);
            	    lv_operator_2_0=ruleOpMulti();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      								if (current==null) {
            	      									current = createModelElementForParent(grammarAccess.getAMultiplicativeExpressionRule());
            	      								}
            	      								set(
            	      									current,
            	      									"operator",
            	      									lv_operator_2_0,
            	      									"org.osate.alisa.common.Common.OpMulti");
            	      								afterParserOrEnumRuleCall();
            	      							
            	    }

            	    }


            	    }


            	    }


            	    }

            	    // InternalReqSpec.g:7338:4: ( (lv_right_3_0= ruleAUnaryOperation ) )
            	    // InternalReqSpec.g:7339:5: (lv_right_3_0= ruleAUnaryOperation )
            	    {
            	    // InternalReqSpec.g:7339:5: (lv_right_3_0= ruleAUnaryOperation )
            	    // InternalReqSpec.g:7340:6: lv_right_3_0= ruleAUnaryOperation
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getAMultiplicativeExpressionAccess().getRightAUnaryOperationParserRuleCall_1_1_0());
            	      					
            	    }
            	    pushFollow(FollowSets000.FOLLOW_90);
            	    lv_right_3_0=ruleAUnaryOperation();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getAMultiplicativeExpressionRule());
            	      						}
            	      						set(
            	      							current,
            	      							"right",
            	      							lv_right_3_0,
            	      							"org.osate.alisa.common.Common.AUnaryOperation");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop156;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAMultiplicativeExpression"


    // $ANTLR start "entryRuleOpMulti"
    // InternalReqSpec.g:7362:1: entryRuleOpMulti returns [String current=null] : iv_ruleOpMulti= ruleOpMulti EOF ;
    public final String entryRuleOpMulti() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleOpMulti = null;


        try {
            // InternalReqSpec.g:7362:47: (iv_ruleOpMulti= ruleOpMulti EOF )
            // InternalReqSpec.g:7363:2: iv_ruleOpMulti= ruleOpMulti EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpMultiRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleOpMulti=ruleOpMulti();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpMulti.getText(); 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleOpMulti"


    // $ANTLR start "ruleOpMulti"
    // InternalReqSpec.g:7369:1: ruleOpMulti returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= '*' | kw= '/' | kw= 'div' | kw= 'mod' ) ;
    public final AntlrDatatypeRuleToken ruleOpMulti() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;


        	enterRule();

        try {
            // InternalReqSpec.g:7375:2: ( (kw= '*' | kw= '/' | kw= 'div' | kw= 'mod' ) )
            // InternalReqSpec.g:7376:2: (kw= '*' | kw= '/' | kw= 'div' | kw= 'mod' )
            {
            // InternalReqSpec.g:7376:2: (kw= '*' | kw= '/' | kw= 'div' | kw= 'mod' )
            int alt157=4;
            switch ( input.LA(1) ) {
            case 96:
                {
                alt157=1;
                }
                break;
            case 64:
                {
                alt157=2;
                }
                break;
            case 97:
                {
                alt157=3;
                }
                break;
            case 98:
                {
                alt157=4;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 157, 0, input);

                throw nvae;
            }

            switch (alt157) {
                case 1 :
                    // InternalReqSpec.g:7377:3: kw= '*'
                    {
                    kw=(Token)match(input,96,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpMultiAccess().getAsteriskKeyword_0());
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalReqSpec.g:7383:3: kw= '/'
                    {
                    kw=(Token)match(input,64,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpMultiAccess().getSolidusKeyword_1());
                      		
                    }

                    }
                    break;
                case 3 :
                    // InternalReqSpec.g:7389:3: kw= 'div'
                    {
                    kw=(Token)match(input,97,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpMultiAccess().getDivKeyword_2());
                      		
                    }

                    }
                    break;
                case 4 :
                    // InternalReqSpec.g:7395:3: kw= 'mod'
                    {
                    kw=(Token)match(input,98,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpMultiAccess().getModKeyword_3());
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleOpMulti"


    // $ANTLR start "entryRuleAUnaryOperation"
    // InternalReqSpec.g:7404:1: entryRuleAUnaryOperation returns [EObject current=null] : iv_ruleAUnaryOperation= ruleAUnaryOperation EOF ;
    public final EObject entryRuleAUnaryOperation() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAUnaryOperation = null;


        try {
            // InternalReqSpec.g:7404:56: (iv_ruleAUnaryOperation= ruleAUnaryOperation EOF )
            // InternalReqSpec.g:7405:2: iv_ruleAUnaryOperation= ruleAUnaryOperation EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAUnaryOperationRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleAUnaryOperation=ruleAUnaryOperation();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAUnaryOperation; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAUnaryOperation"


    // $ANTLR start "ruleAUnaryOperation"
    // InternalReqSpec.g:7411:1: ruleAUnaryOperation returns [EObject current=null] : ( ( () ( ( ( ruleOpUnary ) )=> (lv_operator_1_0= ruleOpUnary ) ) ( (lv_operand_2_0= ruleAUnaryOperation ) ) ) | this_AUnitExpression_3= ruleAUnitExpression ) ;
    public final EObject ruleAUnaryOperation() throws RecognitionException {
        EObject current = null;

        AntlrDatatypeRuleToken lv_operator_1_0 = null;

        EObject lv_operand_2_0 = null;

        EObject this_AUnitExpression_3 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:7417:2: ( ( ( () ( ( ( ruleOpUnary ) )=> (lv_operator_1_0= ruleOpUnary ) ) ( (lv_operand_2_0= ruleAUnaryOperation ) ) ) | this_AUnitExpression_3= ruleAUnitExpression ) )
            // InternalReqSpec.g:7418:2: ( ( () ( ( ( ruleOpUnary ) )=> (lv_operator_1_0= ruleOpUnary ) ) ( (lv_operand_2_0= ruleAUnaryOperation ) ) ) | this_AUnitExpression_3= ruleAUnitExpression )
            {
            // InternalReqSpec.g:7418:2: ( ( () ( ( ( ruleOpUnary ) )=> (lv_operator_1_0= ruleOpUnary ) ) ( (lv_operand_2_0= ruleAUnaryOperation ) ) ) | this_AUnitExpression_3= ruleAUnitExpression )
            int alt158=2;
            int LA158_0 = input.LA(1);

            if ( ((LA158_0>=94 && LA158_0<=95)||LA158_0==99) ) {
                alt158=1;
            }
            else if ( ((LA158_0>=RULE_STRING && LA158_0<=RULE_REAL_LIT)||LA158_0==18||LA158_0==52||LA158_0==59||LA158_0==67||LA158_0==102||(LA158_0>=106 && LA158_0<=107)) ) {
                alt158=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 158, 0, input);

                throw nvae;
            }
            switch (alt158) {
                case 1 :
                    // InternalReqSpec.g:7419:3: ( () ( ( ( ruleOpUnary ) )=> (lv_operator_1_0= ruleOpUnary ) ) ( (lv_operand_2_0= ruleAUnaryOperation ) ) )
                    {
                    // InternalReqSpec.g:7419:3: ( () ( ( ( ruleOpUnary ) )=> (lv_operator_1_0= ruleOpUnary ) ) ( (lv_operand_2_0= ruleAUnaryOperation ) ) )
                    // InternalReqSpec.g:7420:4: () ( ( ( ruleOpUnary ) )=> (lv_operator_1_0= ruleOpUnary ) ) ( (lv_operand_2_0= ruleAUnaryOperation ) )
                    {
                    // InternalReqSpec.g:7420:4: ()
                    // InternalReqSpec.g:7421:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElement(
                      						grammarAccess.getAUnaryOperationAccess().getAUnaryOperationAction_0_0(),
                      						current);
                      				
                    }

                    }

                    // InternalReqSpec.g:7427:4: ( ( ( ruleOpUnary ) )=> (lv_operator_1_0= ruleOpUnary ) )
                    // InternalReqSpec.g:7428:5: ( ( ruleOpUnary ) )=> (lv_operator_1_0= ruleOpUnary )
                    {
                    // InternalReqSpec.g:7432:5: (lv_operator_1_0= ruleOpUnary )
                    // InternalReqSpec.g:7433:6: lv_operator_1_0= ruleOpUnary
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getAUnaryOperationAccess().getOperatorOpUnaryParserRuleCall_0_1_0());
                      					
                    }
                    pushFollow(FollowSets000.FOLLOW_62);
                    lv_operator_1_0=ruleOpUnary();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getAUnaryOperationRule());
                      						}
                      						set(
                      							current,
                      							"operator",
                      							lv_operator_1_0,
                      							"org.osate.alisa.common.Common.OpUnary");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }

                    // InternalReqSpec.g:7450:4: ( (lv_operand_2_0= ruleAUnaryOperation ) )
                    // InternalReqSpec.g:7451:5: (lv_operand_2_0= ruleAUnaryOperation )
                    {
                    // InternalReqSpec.g:7451:5: (lv_operand_2_0= ruleAUnaryOperation )
                    // InternalReqSpec.g:7452:6: lv_operand_2_0= ruleAUnaryOperation
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getAUnaryOperationAccess().getOperandAUnaryOperationParserRuleCall_0_2_0());
                      					
                    }
                    pushFollow(FollowSets000.FOLLOW_2);
                    lv_operand_2_0=ruleAUnaryOperation();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getAUnaryOperationRule());
                      						}
                      						set(
                      							current,
                      							"operand",
                      							lv_operand_2_0,
                      							"org.osate.alisa.common.Common.AUnaryOperation");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalReqSpec.g:7471:3: this_AUnitExpression_3= ruleAUnitExpression
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getAUnaryOperationAccess().getAUnitExpressionParserRuleCall_1());
                      		
                    }
                    pushFollow(FollowSets000.FOLLOW_2);
                    this_AUnitExpression_3=ruleAUnitExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_AUnitExpression_3;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAUnaryOperation"


    // $ANTLR start "entryRuleOpUnary"
    // InternalReqSpec.g:7483:1: entryRuleOpUnary returns [String current=null] : iv_ruleOpUnary= ruleOpUnary EOF ;
    public final String entryRuleOpUnary() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleOpUnary = null;


        try {
            // InternalReqSpec.g:7483:47: (iv_ruleOpUnary= ruleOpUnary EOF )
            // InternalReqSpec.g:7484:2: iv_ruleOpUnary= ruleOpUnary EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpUnaryRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleOpUnary=ruleOpUnary();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpUnary.getText(); 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleOpUnary"


    // $ANTLR start "ruleOpUnary"
    // InternalReqSpec.g:7490:1: ruleOpUnary returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= 'not' | kw= '-' | kw= '+' ) ;
    public final AntlrDatatypeRuleToken ruleOpUnary() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;


        	enterRule();

        try {
            // InternalReqSpec.g:7496:2: ( (kw= 'not' | kw= '-' | kw= '+' ) )
            // InternalReqSpec.g:7497:2: (kw= 'not' | kw= '-' | kw= '+' )
            {
            // InternalReqSpec.g:7497:2: (kw= 'not' | kw= '-' | kw= '+' )
            int alt159=3;
            switch ( input.LA(1) ) {
            case 99:
                {
                alt159=1;
                }
                break;
            case 95:
                {
                alt159=2;
                }
                break;
            case 94:
                {
                alt159=3;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 159, 0, input);

                throw nvae;
            }

            switch (alt159) {
                case 1 :
                    // InternalReqSpec.g:7498:3: kw= 'not'
                    {
                    kw=(Token)match(input,99,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpUnaryAccess().getNotKeyword_0());
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalReqSpec.g:7504:3: kw= '-'
                    {
                    kw=(Token)match(input,95,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpUnaryAccess().getHyphenMinusKeyword_1());
                      		
                    }

                    }
                    break;
                case 3 :
                    // InternalReqSpec.g:7510:3: kw= '+'
                    {
                    kw=(Token)match(input,94,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpUnaryAccess().getPlusSignKeyword_2());
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleOpUnary"


    // $ANTLR start "entryRuleAUnitExpression"
    // InternalReqSpec.g:7519:1: entryRuleAUnitExpression returns [EObject current=null] : iv_ruleAUnitExpression= ruleAUnitExpression EOF ;
    public final EObject entryRuleAUnitExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAUnitExpression = null;


        try {
            // InternalReqSpec.g:7519:56: (iv_ruleAUnitExpression= ruleAUnitExpression EOF )
            // InternalReqSpec.g:7520:2: iv_ruleAUnitExpression= ruleAUnitExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAUnitExpressionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleAUnitExpression=ruleAUnitExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAUnitExpression; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAUnitExpression"


    // $ANTLR start "ruleAUnitExpression"
    // InternalReqSpec.g:7526:1: ruleAUnitExpression returns [EObject current=null] : (this_APrimaryExpression_0= ruleAPrimaryExpression ( () ( ( (lv_convert_2_0= '%' ) ) | ( (lv_drop_3_0= 'in' ) ) )? ( (otherlv_4= RULE_ID ) ) )? ) ;
    public final EObject ruleAUnitExpression() throws RecognitionException {
        EObject current = null;

        Token lv_convert_2_0=null;
        Token lv_drop_3_0=null;
        Token otherlv_4=null;
        EObject this_APrimaryExpression_0 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:7532:2: ( (this_APrimaryExpression_0= ruleAPrimaryExpression ( () ( ( (lv_convert_2_0= '%' ) ) | ( (lv_drop_3_0= 'in' ) ) )? ( (otherlv_4= RULE_ID ) ) )? ) )
            // InternalReqSpec.g:7533:2: (this_APrimaryExpression_0= ruleAPrimaryExpression ( () ( ( (lv_convert_2_0= '%' ) ) | ( (lv_drop_3_0= 'in' ) ) )? ( (otherlv_4= RULE_ID ) ) )? )
            {
            // InternalReqSpec.g:7533:2: (this_APrimaryExpression_0= ruleAPrimaryExpression ( () ( ( (lv_convert_2_0= '%' ) ) | ( (lv_drop_3_0= 'in' ) ) )? ( (otherlv_4= RULE_ID ) ) )? )
            // InternalReqSpec.g:7534:3: this_APrimaryExpression_0= ruleAPrimaryExpression ( () ( ( (lv_convert_2_0= '%' ) ) | ( (lv_drop_3_0= 'in' ) ) )? ( (otherlv_4= RULE_ID ) ) )?
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getAUnitExpressionAccess().getAPrimaryExpressionParserRuleCall_0());
              		
            }
            pushFollow(FollowSets000.FOLLOW_91);
            this_APrimaryExpression_0=ruleAPrimaryExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current = this_APrimaryExpression_0;
              			afterParserOrEnumRuleCall();
              		
            }
            // InternalReqSpec.g:7542:3: ( () ( ( (lv_convert_2_0= '%' ) ) | ( (lv_drop_3_0= 'in' ) ) )? ( (otherlv_4= RULE_ID ) ) )?
            int alt161=2;
            int LA161_0 = input.LA(1);

            if ( (LA161_0==47||LA161_0==81) ) {
                alt161=1;
            }
            else if ( (LA161_0==RULE_ID) ) {
                int LA161_2 = input.LA(2);

                if ( (LA161_2==EOF||LA161_2==RULE_ID||(LA161_2>=19 && LA161_2<=20)||LA161_2==25||LA161_2==27||(LA161_2>=32 && LA161_2<=44)||LA161_2==46||LA161_2==49||(LA161_2>=53 && LA161_2<=54)||LA161_2==56||LA161_2==60||(LA161_2>=63 && LA161_2<=64)||LA161_2==66||(LA161_2>=68 && LA161_2<=69)||LA161_2==80||(LA161_2>=83 && LA161_2<=98)||(LA161_2>=100 && LA161_2<=101)||(LA161_2>=103 && LA161_2<=105)) ) {
                    alt161=1;
                }
            }
            switch (alt161) {
                case 1 :
                    // InternalReqSpec.g:7543:4: () ( ( (lv_convert_2_0= '%' ) ) | ( (lv_drop_3_0= 'in' ) ) )? ( (otherlv_4= RULE_ID ) )
                    {
                    // InternalReqSpec.g:7543:4: ()
                    // InternalReqSpec.g:7544:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElementAndSet(
                      						grammarAccess.getAUnitExpressionAccess().getAUnitExpressionExpressionAction_1_0(),
                      						current);
                      				
                    }

                    }

                    // InternalReqSpec.g:7550:4: ( ( (lv_convert_2_0= '%' ) ) | ( (lv_drop_3_0= 'in' ) ) )?
                    int alt160=3;
                    int LA160_0 = input.LA(1);

                    if ( (LA160_0==81) ) {
                        alt160=1;
                    }
                    else if ( (LA160_0==47) ) {
                        alt160=2;
                    }
                    switch (alt160) {
                        case 1 :
                            // InternalReqSpec.g:7551:5: ( (lv_convert_2_0= '%' ) )
                            {
                            // InternalReqSpec.g:7551:5: ( (lv_convert_2_0= '%' ) )
                            // InternalReqSpec.g:7552:6: (lv_convert_2_0= '%' )
                            {
                            // InternalReqSpec.g:7552:6: (lv_convert_2_0= '%' )
                            // InternalReqSpec.g:7553:7: lv_convert_2_0= '%'
                            {
                            lv_convert_2_0=(Token)match(input,81,FollowSets000.FOLLOW_4); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							newLeafNode(lv_convert_2_0, grammarAccess.getAUnitExpressionAccess().getConvertPercentSignKeyword_1_1_0_0());
                              						
                            }
                            if ( state.backtracking==0 ) {

                              							if (current==null) {
                              								current = createModelElement(grammarAccess.getAUnitExpressionRule());
                              							}
                              							setWithLastConsumed(current, "convert", true, "%");
                              						
                            }

                            }


                            }


                            }
                            break;
                        case 2 :
                            // InternalReqSpec.g:7566:5: ( (lv_drop_3_0= 'in' ) )
                            {
                            // InternalReqSpec.g:7566:5: ( (lv_drop_3_0= 'in' ) )
                            // InternalReqSpec.g:7567:6: (lv_drop_3_0= 'in' )
                            {
                            // InternalReqSpec.g:7567:6: (lv_drop_3_0= 'in' )
                            // InternalReqSpec.g:7568:7: lv_drop_3_0= 'in'
                            {
                            lv_drop_3_0=(Token)match(input,47,FollowSets000.FOLLOW_4); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							newLeafNode(lv_drop_3_0, grammarAccess.getAUnitExpressionAccess().getDropInKeyword_1_1_1_0());
                              						
                            }
                            if ( state.backtracking==0 ) {

                              							if (current==null) {
                              								current = createModelElement(grammarAccess.getAUnitExpressionRule());
                              							}
                              							setWithLastConsumed(current, "drop", true, "in");
                              						
                            }

                            }


                            }


                            }
                            break;

                    }

                    // InternalReqSpec.g:7581:4: ( (otherlv_4= RULE_ID ) )
                    // InternalReqSpec.g:7582:5: (otherlv_4= RULE_ID )
                    {
                    // InternalReqSpec.g:7582:5: (otherlv_4= RULE_ID )
                    // InternalReqSpec.g:7583:6: otherlv_4= RULE_ID
                    {
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getAUnitExpressionRule());
                      						}
                      					
                    }
                    otherlv_4=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(otherlv_4, grammarAccess.getAUnitExpressionAccess().getUnitUnitLiteralCrossReference_1_2_0());
                      					
                    }

                    }


                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAUnitExpression"


    // $ANTLR start "entryRuleAPrimaryExpression"
    // InternalReqSpec.g:7599:1: entryRuleAPrimaryExpression returns [EObject current=null] : iv_ruleAPrimaryExpression= ruleAPrimaryExpression EOF ;
    public final EObject entryRuleAPrimaryExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAPrimaryExpression = null;


        try {
            // InternalReqSpec.g:7599:59: (iv_ruleAPrimaryExpression= ruleAPrimaryExpression EOF )
            // InternalReqSpec.g:7600:2: iv_ruleAPrimaryExpression= ruleAPrimaryExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAPrimaryExpressionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleAPrimaryExpression=ruleAPrimaryExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAPrimaryExpression; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAPrimaryExpression"


    // $ANTLR start "ruleAPrimaryExpression"
    // InternalReqSpec.g:7606:1: ruleAPrimaryExpression returns [EObject current=null] : (this_ALiteral_0= ruleALiteral | this_AVariableReference_1= ruleAVariableReference | this_AModelOrPropertyReference_2= ruleAModelOrPropertyReference | this_AFunctionCall_3= ruleAFunctionCall | this_ARangeExpression_4= ruleARangeExpression | this_AIfExpression_5= ruleAIfExpression | this_AParenthesizedExpression_6= ruleAParenthesizedExpression ) ;
    public final EObject ruleAPrimaryExpression() throws RecognitionException {
        EObject current = null;

        EObject this_ALiteral_0 = null;

        EObject this_AVariableReference_1 = null;

        EObject this_AModelOrPropertyReference_2 = null;

        EObject this_AFunctionCall_3 = null;

        EObject this_ARangeExpression_4 = null;

        EObject this_AIfExpression_5 = null;

        EObject this_AParenthesizedExpression_6 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:7612:2: ( (this_ALiteral_0= ruleALiteral | this_AVariableReference_1= ruleAVariableReference | this_AModelOrPropertyReference_2= ruleAModelOrPropertyReference | this_AFunctionCall_3= ruleAFunctionCall | this_ARangeExpression_4= ruleARangeExpression | this_AIfExpression_5= ruleAIfExpression | this_AParenthesizedExpression_6= ruleAParenthesizedExpression ) )
            // InternalReqSpec.g:7613:2: (this_ALiteral_0= ruleALiteral | this_AVariableReference_1= ruleAVariableReference | this_AModelOrPropertyReference_2= ruleAModelOrPropertyReference | this_AFunctionCall_3= ruleAFunctionCall | this_ARangeExpression_4= ruleARangeExpression | this_AIfExpression_5= ruleAIfExpression | this_AParenthesizedExpression_6= ruleAParenthesizedExpression )
            {
            // InternalReqSpec.g:7613:2: (this_ALiteral_0= ruleALiteral | this_AVariableReference_1= ruleAVariableReference | this_AModelOrPropertyReference_2= ruleAModelOrPropertyReference | this_AFunctionCall_3= ruleAFunctionCall | this_ARangeExpression_4= ruleARangeExpression | this_AIfExpression_5= ruleAIfExpression | this_AParenthesizedExpression_6= ruleAParenthesizedExpression )
            int alt162=7;
            switch ( input.LA(1) ) {
            case RULE_STRING:
            case RULE_INT:
            case RULE_REAL_LIT:
            case 106:
            case 107:
                {
                alt162=1;
                }
                break;
            case RULE_ID:
                {
                int LA162_2 = input.LA(2);

                if ( (LA162_2==EOF||LA162_2==RULE_ID||(LA162_2>=19 && LA162_2<=20)||LA162_2==25||LA162_2==27||(LA162_2>=32 && LA162_2<=44)||(LA162_2>=46 && LA162_2<=47)||LA162_2==49||(LA162_2>=53 && LA162_2<=54)||LA162_2==56||LA162_2==60||(LA162_2>=63 && LA162_2<=64)||LA162_2==66||(LA162_2>=68 && LA162_2<=69)||(LA162_2>=80 && LA162_2<=81)||(LA162_2>=83 && LA162_2<=98)||(LA162_2>=100 && LA162_2<=101)||(LA162_2>=103 && LA162_2<=105)) ) {
                    alt162=2;
                }
                else if ( (LA162_2==52||LA162_2==65) ) {
                    alt162=4;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return current;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 162, 2, input);

                    throw nvae;
                }
                }
                break;
            case 59:
            case 67:
                {
                alt162=3;
                }
                break;
            case 18:
                {
                alt162=5;
                }
                break;
            case 102:
                {
                alt162=6;
                }
                break;
            case 52:
                {
                alt162=7;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 162, 0, input);

                throw nvae;
            }

            switch (alt162) {
                case 1 :
                    // InternalReqSpec.g:7614:3: this_ALiteral_0= ruleALiteral
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getAPrimaryExpressionAccess().getALiteralParserRuleCall_0());
                      		
                    }
                    pushFollow(FollowSets000.FOLLOW_2);
                    this_ALiteral_0=ruleALiteral();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_ALiteral_0;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalReqSpec.g:7623:3: this_AVariableReference_1= ruleAVariableReference
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getAPrimaryExpressionAccess().getAVariableReferenceParserRuleCall_1());
                      		
                    }
                    pushFollow(FollowSets000.FOLLOW_2);
                    this_AVariableReference_1=ruleAVariableReference();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_AVariableReference_1;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 3 :
                    // InternalReqSpec.g:7632:3: this_AModelOrPropertyReference_2= ruleAModelOrPropertyReference
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getAPrimaryExpressionAccess().getAModelOrPropertyReferenceParserRuleCall_2());
                      		
                    }
                    pushFollow(FollowSets000.FOLLOW_2);
                    this_AModelOrPropertyReference_2=ruleAModelOrPropertyReference();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_AModelOrPropertyReference_2;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 4 :
                    // InternalReqSpec.g:7641:3: this_AFunctionCall_3= ruleAFunctionCall
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getAPrimaryExpressionAccess().getAFunctionCallParserRuleCall_3());
                      		
                    }
                    pushFollow(FollowSets000.FOLLOW_2);
                    this_AFunctionCall_3=ruleAFunctionCall();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_AFunctionCall_3;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 5 :
                    // InternalReqSpec.g:7650:3: this_ARangeExpression_4= ruleARangeExpression
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getAPrimaryExpressionAccess().getARangeExpressionParserRuleCall_4());
                      		
                    }
                    pushFollow(FollowSets000.FOLLOW_2);
                    this_ARangeExpression_4=ruleARangeExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_ARangeExpression_4;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 6 :
                    // InternalReqSpec.g:7659:3: this_AIfExpression_5= ruleAIfExpression
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getAPrimaryExpressionAccess().getAIfExpressionParserRuleCall_5());
                      		
                    }
                    pushFollow(FollowSets000.FOLLOW_2);
                    this_AIfExpression_5=ruleAIfExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_AIfExpression_5;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 7 :
                    // InternalReqSpec.g:7668:3: this_AParenthesizedExpression_6= ruleAParenthesizedExpression
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getAPrimaryExpressionAccess().getAParenthesizedExpressionParserRuleCall_6());
                      		
                    }
                    pushFollow(FollowSets000.FOLLOW_2);
                    this_AParenthesizedExpression_6=ruleAParenthesizedExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_AParenthesizedExpression_6;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAPrimaryExpression"


    // $ANTLR start "entryRuleAFunctionCall"
    // InternalReqSpec.g:7680:1: entryRuleAFunctionCall returns [EObject current=null] : iv_ruleAFunctionCall= ruleAFunctionCall EOF ;
    public final EObject entryRuleAFunctionCall() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAFunctionCall = null;


        try {
            // InternalReqSpec.g:7680:54: (iv_ruleAFunctionCall= ruleAFunctionCall EOF )
            // InternalReqSpec.g:7681:2: iv_ruleAFunctionCall= ruleAFunctionCall EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAFunctionCallRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleAFunctionCall=ruleAFunctionCall();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAFunctionCall; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAFunctionCall"


    // $ANTLR start "ruleAFunctionCall"
    // InternalReqSpec.g:7687:1: ruleAFunctionCall returns [EObject current=null] : ( () ( (lv_function_1_0= ruleQualifiedName ) ) otherlv_2= '(' ( ( (lv_arguments_3_0= ruleAExpression ) ) (otherlv_4= ',' ( (lv_arguments_5_0= ruleAExpression ) ) )* )? otherlv_6= ')' ) ;
    public final EObject ruleAFunctionCall() throws RecognitionException {
        EObject current = null;

        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        AntlrDatatypeRuleToken lv_function_1_0 = null;

        EObject lv_arguments_3_0 = null;

        EObject lv_arguments_5_0 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:7693:2: ( ( () ( (lv_function_1_0= ruleQualifiedName ) ) otherlv_2= '(' ( ( (lv_arguments_3_0= ruleAExpression ) ) (otherlv_4= ',' ( (lv_arguments_5_0= ruleAExpression ) ) )* )? otherlv_6= ')' ) )
            // InternalReqSpec.g:7694:2: ( () ( (lv_function_1_0= ruleQualifiedName ) ) otherlv_2= '(' ( ( (lv_arguments_3_0= ruleAExpression ) ) (otherlv_4= ',' ( (lv_arguments_5_0= ruleAExpression ) ) )* )? otherlv_6= ')' )
            {
            // InternalReqSpec.g:7694:2: ( () ( (lv_function_1_0= ruleQualifiedName ) ) otherlv_2= '(' ( ( (lv_arguments_3_0= ruleAExpression ) ) (otherlv_4= ',' ( (lv_arguments_5_0= ruleAExpression ) ) )* )? otherlv_6= ')' )
            // InternalReqSpec.g:7695:3: () ( (lv_function_1_0= ruleQualifiedName ) ) otherlv_2= '(' ( ( (lv_arguments_3_0= ruleAExpression ) ) (otherlv_4= ',' ( (lv_arguments_5_0= ruleAExpression ) ) )* )? otherlv_6= ')'
            {
            // InternalReqSpec.g:7695:3: ()
            // InternalReqSpec.g:7696:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getAFunctionCallAccess().getAFunctionCallAction_0(),
              					current);
              			
            }

            }

            // InternalReqSpec.g:7702:3: ( (lv_function_1_0= ruleQualifiedName ) )
            // InternalReqSpec.g:7703:4: (lv_function_1_0= ruleQualifiedName )
            {
            // InternalReqSpec.g:7703:4: (lv_function_1_0= ruleQualifiedName )
            // InternalReqSpec.g:7704:5: lv_function_1_0= ruleQualifiedName
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getAFunctionCallAccess().getFunctionQualifiedNameParserRuleCall_1_0());
              				
            }
            pushFollow(FollowSets000.FOLLOW_59);
            lv_function_1_0=ruleQualifiedName();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getAFunctionCallRule());
              					}
              					set(
              						current,
              						"function",
              						lv_function_1_0,
              						"org.osate.alisa.common.Common.QualifiedName");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            otherlv_2=(Token)match(input,52,FollowSets000.FOLLOW_92); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_2, grammarAccess.getAFunctionCallAccess().getLeftParenthesisKeyword_2());
              		
            }
            // InternalReqSpec.g:7725:3: ( ( (lv_arguments_3_0= ruleAExpression ) ) (otherlv_4= ',' ( (lv_arguments_5_0= ruleAExpression ) ) )* )?
            int alt164=2;
            int LA164_0 = input.LA(1);

            if ( ((LA164_0>=RULE_STRING && LA164_0<=RULE_REAL_LIT)||LA164_0==18||LA164_0==52||LA164_0==59||LA164_0==67||(LA164_0>=94 && LA164_0<=95)||LA164_0==99||LA164_0==102||(LA164_0>=106 && LA164_0<=107)) ) {
                alt164=1;
            }
            switch (alt164) {
                case 1 :
                    // InternalReqSpec.g:7726:4: ( (lv_arguments_3_0= ruleAExpression ) ) (otherlv_4= ',' ( (lv_arguments_5_0= ruleAExpression ) ) )*
                    {
                    // InternalReqSpec.g:7726:4: ( (lv_arguments_3_0= ruleAExpression ) )
                    // InternalReqSpec.g:7727:5: (lv_arguments_3_0= ruleAExpression )
                    {
                    // InternalReqSpec.g:7727:5: (lv_arguments_3_0= ruleAExpression )
                    // InternalReqSpec.g:7728:6: lv_arguments_3_0= ruleAExpression
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getAFunctionCallAccess().getArgumentsAExpressionParserRuleCall_3_0_0());
                      					
                    }
                    pushFollow(FollowSets000.FOLLOW_93);
                    lv_arguments_3_0=ruleAExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getAFunctionCallRule());
                      						}
                      						add(
                      							current,
                      							"arguments",
                      							lv_arguments_3_0,
                      							"org.osate.alisa.common.Common.AExpression");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }

                    // InternalReqSpec.g:7745:4: (otherlv_4= ',' ( (lv_arguments_5_0= ruleAExpression ) ) )*
                    loop163:
                    do {
                        int alt163=2;
                        int LA163_0 = input.LA(1);

                        if ( (LA163_0==49) ) {
                            alt163=1;
                        }


                        switch (alt163) {
                    	case 1 :
                    	    // InternalReqSpec.g:7746:5: otherlv_4= ',' ( (lv_arguments_5_0= ruleAExpression ) )
                    	    {
                    	    otherlv_4=(Token)match(input,49,FollowSets000.FOLLOW_62); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      					newLeafNode(otherlv_4, grammarAccess.getAFunctionCallAccess().getCommaKeyword_3_1_0());
                    	      				
                    	    }
                    	    // InternalReqSpec.g:7750:5: ( (lv_arguments_5_0= ruleAExpression ) )
                    	    // InternalReqSpec.g:7751:6: (lv_arguments_5_0= ruleAExpression )
                    	    {
                    	    // InternalReqSpec.g:7751:6: (lv_arguments_5_0= ruleAExpression )
                    	    // InternalReqSpec.g:7752:7: lv_arguments_5_0= ruleAExpression
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      							newCompositeNode(grammarAccess.getAFunctionCallAccess().getArgumentsAExpressionParserRuleCall_3_1_1_0());
                    	      						
                    	    }
                    	    pushFollow(FollowSets000.FOLLOW_93);
                    	    lv_arguments_5_0=ruleAExpression();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      							if (current==null) {
                    	      								current = createModelElementForParent(grammarAccess.getAFunctionCallRule());
                    	      							}
                    	      							add(
                    	      								current,
                    	      								"arguments",
                    	      								lv_arguments_5_0,
                    	      								"org.osate.alisa.common.Common.AExpression");
                    	      							afterParserOrEnumRuleCall();
                    	      						
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop163;
                        }
                    } while (true);


                    }
                    break;

            }

            otherlv_6=(Token)match(input,53,FollowSets000.FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_6, grammarAccess.getAFunctionCallAccess().getRightParenthesisKeyword_4());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAFunctionCall"


    // $ANTLR start "entryRuleARangeExpression"
    // InternalReqSpec.g:7779:1: entryRuleARangeExpression returns [EObject current=null] : iv_ruleARangeExpression= ruleARangeExpression EOF ;
    public final EObject entryRuleARangeExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleARangeExpression = null;


        try {
            // InternalReqSpec.g:7779:57: (iv_ruleARangeExpression= ruleARangeExpression EOF )
            // InternalReqSpec.g:7780:2: iv_ruleARangeExpression= ruleARangeExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getARangeExpressionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleARangeExpression=ruleARangeExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleARangeExpression; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleARangeExpression"


    // $ANTLR start "ruleARangeExpression"
    // InternalReqSpec.g:7786:1: ruleARangeExpression returns [EObject current=null] : ( () otherlv_1= '[' ( (lv_minimum_2_0= ruleAExpression ) ) otherlv_3= '..' ( (lv_maximum_4_0= ruleAExpression ) ) ( ( ( 'delta' )=>otherlv_5= 'delta' ) ( (lv_delta_6_0= ruleAExpression ) ) )? otherlv_7= ']' ) ;
    public final EObject ruleARangeExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        EObject lv_minimum_2_0 = null;

        EObject lv_maximum_4_0 = null;

        EObject lv_delta_6_0 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:7792:2: ( ( () otherlv_1= '[' ( (lv_minimum_2_0= ruleAExpression ) ) otherlv_3= '..' ( (lv_maximum_4_0= ruleAExpression ) ) ( ( ( 'delta' )=>otherlv_5= 'delta' ) ( (lv_delta_6_0= ruleAExpression ) ) )? otherlv_7= ']' ) )
            // InternalReqSpec.g:7793:2: ( () otherlv_1= '[' ( (lv_minimum_2_0= ruleAExpression ) ) otherlv_3= '..' ( (lv_maximum_4_0= ruleAExpression ) ) ( ( ( 'delta' )=>otherlv_5= 'delta' ) ( (lv_delta_6_0= ruleAExpression ) ) )? otherlv_7= ']' )
            {
            // InternalReqSpec.g:7793:2: ( () otherlv_1= '[' ( (lv_minimum_2_0= ruleAExpression ) ) otherlv_3= '..' ( (lv_maximum_4_0= ruleAExpression ) ) ( ( ( 'delta' )=>otherlv_5= 'delta' ) ( (lv_delta_6_0= ruleAExpression ) ) )? otherlv_7= ']' )
            // InternalReqSpec.g:7794:3: () otherlv_1= '[' ( (lv_minimum_2_0= ruleAExpression ) ) otherlv_3= '..' ( (lv_maximum_4_0= ruleAExpression ) ) ( ( ( 'delta' )=>otherlv_5= 'delta' ) ( (lv_delta_6_0= ruleAExpression ) ) )? otherlv_7= ']'
            {
            // InternalReqSpec.g:7794:3: ()
            // InternalReqSpec.g:7795:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getARangeExpressionAccess().getARangeAction_0(),
              					current);
              			
            }

            }

            otherlv_1=(Token)match(input,18,FollowSets000.FOLLOW_62); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getARangeExpressionAccess().getLeftSquareBracketKeyword_1());
              		
            }
            // InternalReqSpec.g:7805:3: ( (lv_minimum_2_0= ruleAExpression ) )
            // InternalReqSpec.g:7806:4: (lv_minimum_2_0= ruleAExpression )
            {
            // InternalReqSpec.g:7806:4: (lv_minimum_2_0= ruleAExpression )
            // InternalReqSpec.g:7807:5: lv_minimum_2_0= ruleAExpression
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getARangeExpressionAccess().getMinimumAExpressionParserRuleCall_2_0());
              				
            }
            pushFollow(FollowSets000.FOLLOW_94);
            lv_minimum_2_0=ruleAExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getARangeExpressionRule());
              					}
              					set(
              						current,
              						"minimum",
              						lv_minimum_2_0,
              						"org.osate.alisa.common.Common.AExpression");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            otherlv_3=(Token)match(input,100,FollowSets000.FOLLOW_62); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_3, grammarAccess.getARangeExpressionAccess().getFullStopFullStopKeyword_3());
              		
            }
            // InternalReqSpec.g:7828:3: ( (lv_maximum_4_0= ruleAExpression ) )
            // InternalReqSpec.g:7829:4: (lv_maximum_4_0= ruleAExpression )
            {
            // InternalReqSpec.g:7829:4: (lv_maximum_4_0= ruleAExpression )
            // InternalReqSpec.g:7830:5: lv_maximum_4_0= ruleAExpression
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getARangeExpressionAccess().getMaximumAExpressionParserRuleCall_4_0());
              				
            }
            pushFollow(FollowSets000.FOLLOW_95);
            lv_maximum_4_0=ruleAExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getARangeExpressionRule());
              					}
              					set(
              						current,
              						"maximum",
              						lv_maximum_4_0,
              						"org.osate.alisa.common.Common.AExpression");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalReqSpec.g:7847:3: ( ( ( 'delta' )=>otherlv_5= 'delta' ) ( (lv_delta_6_0= ruleAExpression ) ) )?
            int alt165=2;
            int LA165_0 = input.LA(1);

            if ( (LA165_0==101) && (synpred11_InternalReqSpec())) {
                alt165=1;
            }
            switch (alt165) {
                case 1 :
                    // InternalReqSpec.g:7848:4: ( ( 'delta' )=>otherlv_5= 'delta' ) ( (lv_delta_6_0= ruleAExpression ) )
                    {
                    // InternalReqSpec.g:7848:4: ( ( 'delta' )=>otherlv_5= 'delta' )
                    // InternalReqSpec.g:7849:5: ( 'delta' )=>otherlv_5= 'delta'
                    {
                    otherlv_5=(Token)match(input,101,FollowSets000.FOLLOW_62); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_5, grammarAccess.getARangeExpressionAccess().getDeltaKeyword_5_0());
                      				
                    }

                    }

                    // InternalReqSpec.g:7855:4: ( (lv_delta_6_0= ruleAExpression ) )
                    // InternalReqSpec.g:7856:5: (lv_delta_6_0= ruleAExpression )
                    {
                    // InternalReqSpec.g:7856:5: (lv_delta_6_0= ruleAExpression )
                    // InternalReqSpec.g:7857:6: lv_delta_6_0= ruleAExpression
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getARangeExpressionAccess().getDeltaAExpressionParserRuleCall_5_1_0());
                      					
                    }
                    pushFollow(FollowSets000.FOLLOW_72);
                    lv_delta_6_0=ruleAExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getARangeExpressionRule());
                      						}
                      						set(
                      							current,
                      							"delta",
                      							lv_delta_6_0,
                      							"org.osate.alisa.common.Common.AExpression");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            otherlv_7=(Token)match(input,19,FollowSets000.FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_7, grammarAccess.getARangeExpressionAccess().getRightSquareBracketKeyword_6());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleARangeExpression"


    // $ANTLR start "entryRuleAIfExpression"
    // InternalReqSpec.g:7883:1: entryRuleAIfExpression returns [EObject current=null] : iv_ruleAIfExpression= ruleAIfExpression EOF ;
    public final EObject entryRuleAIfExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAIfExpression = null;


        try {
            // InternalReqSpec.g:7883:54: (iv_ruleAIfExpression= ruleAIfExpression EOF )
            // InternalReqSpec.g:7884:2: iv_ruleAIfExpression= ruleAIfExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAIfExpressionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleAIfExpression=ruleAIfExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAIfExpression; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAIfExpression"


    // $ANTLR start "ruleAIfExpression"
    // InternalReqSpec.g:7890:1: ruleAIfExpression returns [EObject current=null] : ( () otherlv_1= 'if' ( (lv_if_2_0= ruleAExpression ) ) otherlv_3= 'then' ( (lv_then_4_0= ruleAExpression ) ) (otherlv_5= 'else' ( (lv_else_6_0= ruleAExpression ) ) )? otherlv_7= 'endif' ) ;
    public final EObject ruleAIfExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        EObject lv_if_2_0 = null;

        EObject lv_then_4_0 = null;

        EObject lv_else_6_0 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:7896:2: ( ( () otherlv_1= 'if' ( (lv_if_2_0= ruleAExpression ) ) otherlv_3= 'then' ( (lv_then_4_0= ruleAExpression ) ) (otherlv_5= 'else' ( (lv_else_6_0= ruleAExpression ) ) )? otherlv_7= 'endif' ) )
            // InternalReqSpec.g:7897:2: ( () otherlv_1= 'if' ( (lv_if_2_0= ruleAExpression ) ) otherlv_3= 'then' ( (lv_then_4_0= ruleAExpression ) ) (otherlv_5= 'else' ( (lv_else_6_0= ruleAExpression ) ) )? otherlv_7= 'endif' )
            {
            // InternalReqSpec.g:7897:2: ( () otherlv_1= 'if' ( (lv_if_2_0= ruleAExpression ) ) otherlv_3= 'then' ( (lv_then_4_0= ruleAExpression ) ) (otherlv_5= 'else' ( (lv_else_6_0= ruleAExpression ) ) )? otherlv_7= 'endif' )
            // InternalReqSpec.g:7898:3: () otherlv_1= 'if' ( (lv_if_2_0= ruleAExpression ) ) otherlv_3= 'then' ( (lv_then_4_0= ruleAExpression ) ) (otherlv_5= 'else' ( (lv_else_6_0= ruleAExpression ) ) )? otherlv_7= 'endif'
            {
            // InternalReqSpec.g:7898:3: ()
            // InternalReqSpec.g:7899:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getAIfExpressionAccess().getAConditionalAction_0(),
              					current);
              			
            }

            }

            otherlv_1=(Token)match(input,102,FollowSets000.FOLLOW_62); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getAIfExpressionAccess().getIfKeyword_1());
              		
            }
            // InternalReqSpec.g:7909:3: ( (lv_if_2_0= ruleAExpression ) )
            // InternalReqSpec.g:7910:4: (lv_if_2_0= ruleAExpression )
            {
            // InternalReqSpec.g:7910:4: (lv_if_2_0= ruleAExpression )
            // InternalReqSpec.g:7911:5: lv_if_2_0= ruleAExpression
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getAIfExpressionAccess().getIfAExpressionParserRuleCall_2_0());
              				
            }
            pushFollow(FollowSets000.FOLLOW_96);
            lv_if_2_0=ruleAExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getAIfExpressionRule());
              					}
              					set(
              						current,
              						"if",
              						lv_if_2_0,
              						"org.osate.alisa.common.Common.AExpression");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            otherlv_3=(Token)match(input,103,FollowSets000.FOLLOW_62); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_3, grammarAccess.getAIfExpressionAccess().getThenKeyword_3());
              		
            }
            // InternalReqSpec.g:7932:3: ( (lv_then_4_0= ruleAExpression ) )
            // InternalReqSpec.g:7933:4: (lv_then_4_0= ruleAExpression )
            {
            // InternalReqSpec.g:7933:4: (lv_then_4_0= ruleAExpression )
            // InternalReqSpec.g:7934:5: lv_then_4_0= ruleAExpression
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getAIfExpressionAccess().getThenAExpressionParserRuleCall_4_0());
              				
            }
            pushFollow(FollowSets000.FOLLOW_97);
            lv_then_4_0=ruleAExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getAIfExpressionRule());
              					}
              					set(
              						current,
              						"then",
              						lv_then_4_0,
              						"org.osate.alisa.common.Common.AExpression");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalReqSpec.g:7951:3: (otherlv_5= 'else' ( (lv_else_6_0= ruleAExpression ) ) )?
            int alt166=2;
            int LA166_0 = input.LA(1);

            if ( (LA166_0==104) ) {
                alt166=1;
            }
            switch (alt166) {
                case 1 :
                    // InternalReqSpec.g:7952:4: otherlv_5= 'else' ( (lv_else_6_0= ruleAExpression ) )
                    {
                    otherlv_5=(Token)match(input,104,FollowSets000.FOLLOW_62); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_5, grammarAccess.getAIfExpressionAccess().getElseKeyword_5_0());
                      			
                    }
                    // InternalReqSpec.g:7956:4: ( (lv_else_6_0= ruleAExpression ) )
                    // InternalReqSpec.g:7957:5: (lv_else_6_0= ruleAExpression )
                    {
                    // InternalReqSpec.g:7957:5: (lv_else_6_0= ruleAExpression )
                    // InternalReqSpec.g:7958:6: lv_else_6_0= ruleAExpression
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getAIfExpressionAccess().getElseAExpressionParserRuleCall_5_1_0());
                      					
                    }
                    pushFollow(FollowSets000.FOLLOW_98);
                    lv_else_6_0=ruleAExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getAIfExpressionRule());
                      						}
                      						set(
                      							current,
                      							"else",
                      							lv_else_6_0,
                      							"org.osate.alisa.common.Common.AExpression");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            otherlv_7=(Token)match(input,105,FollowSets000.FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_7, grammarAccess.getAIfExpressionAccess().getEndifKeyword_6());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAIfExpression"


    // $ANTLR start "entryRuleALiteral"
    // InternalReqSpec.g:7984:1: entryRuleALiteral returns [EObject current=null] : iv_ruleALiteral= ruleALiteral EOF ;
    public final EObject entryRuleALiteral() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleALiteral = null;


        try {
            // InternalReqSpec.g:7984:49: (iv_ruleALiteral= ruleALiteral EOF )
            // InternalReqSpec.g:7985:2: iv_ruleALiteral= ruleALiteral EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getALiteralRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleALiteral=ruleALiteral();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleALiteral; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleALiteral"


    // $ANTLR start "ruleALiteral"
    // InternalReqSpec.g:7991:1: ruleALiteral returns [EObject current=null] : (this_ABooleanLiteral_0= ruleABooleanLiteral | this_ARealTerm_1= ruleARealTerm | this_AIntegerTerm_2= ruleAIntegerTerm | this_StringTerm_3= ruleStringTerm ) ;
    public final EObject ruleALiteral() throws RecognitionException {
        EObject current = null;

        EObject this_ABooleanLiteral_0 = null;

        EObject this_ARealTerm_1 = null;

        EObject this_AIntegerTerm_2 = null;

        EObject this_StringTerm_3 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:7997:2: ( (this_ABooleanLiteral_0= ruleABooleanLiteral | this_ARealTerm_1= ruleARealTerm | this_AIntegerTerm_2= ruleAIntegerTerm | this_StringTerm_3= ruleStringTerm ) )
            // InternalReqSpec.g:7998:2: (this_ABooleanLiteral_0= ruleABooleanLiteral | this_ARealTerm_1= ruleARealTerm | this_AIntegerTerm_2= ruleAIntegerTerm | this_StringTerm_3= ruleStringTerm )
            {
            // InternalReqSpec.g:7998:2: (this_ABooleanLiteral_0= ruleABooleanLiteral | this_ARealTerm_1= ruleARealTerm | this_AIntegerTerm_2= ruleAIntegerTerm | this_StringTerm_3= ruleStringTerm )
            int alt167=4;
            switch ( input.LA(1) ) {
            case 106:
            case 107:
                {
                alt167=1;
                }
                break;
            case RULE_REAL_LIT:
                {
                alt167=2;
                }
                break;
            case RULE_INT:
                {
                alt167=3;
                }
                break;
            case RULE_STRING:
                {
                alt167=4;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 167, 0, input);

                throw nvae;
            }

            switch (alt167) {
                case 1 :
                    // InternalReqSpec.g:7999:3: this_ABooleanLiteral_0= ruleABooleanLiteral
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getALiteralAccess().getABooleanLiteralParserRuleCall_0());
                      		
                    }
                    pushFollow(FollowSets000.FOLLOW_2);
                    this_ABooleanLiteral_0=ruleABooleanLiteral();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_ABooleanLiteral_0;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalReqSpec.g:8008:3: this_ARealTerm_1= ruleARealTerm
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getALiteralAccess().getARealTermParserRuleCall_1());
                      		
                    }
                    pushFollow(FollowSets000.FOLLOW_2);
                    this_ARealTerm_1=ruleARealTerm();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_ARealTerm_1;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 3 :
                    // InternalReqSpec.g:8017:3: this_AIntegerTerm_2= ruleAIntegerTerm
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getALiteralAccess().getAIntegerTermParserRuleCall_2());
                      		
                    }
                    pushFollow(FollowSets000.FOLLOW_2);
                    this_AIntegerTerm_2=ruleAIntegerTerm();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_AIntegerTerm_2;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 4 :
                    // InternalReqSpec.g:8026:3: this_StringTerm_3= ruleStringTerm
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getALiteralAccess().getStringTermParserRuleCall_3());
                      		
                    }
                    pushFollow(FollowSets000.FOLLOW_2);
                    this_StringTerm_3=ruleStringTerm();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_StringTerm_3;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleALiteral"


    // $ANTLR start "entryRuleAIntegerTerm"
    // InternalReqSpec.g:8038:1: entryRuleAIntegerTerm returns [EObject current=null] : iv_ruleAIntegerTerm= ruleAIntegerTerm EOF ;
    public final EObject entryRuleAIntegerTerm() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAIntegerTerm = null;


        try {
            // InternalReqSpec.g:8038:53: (iv_ruleAIntegerTerm= ruleAIntegerTerm EOF )
            // InternalReqSpec.g:8039:2: iv_ruleAIntegerTerm= ruleAIntegerTerm EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAIntegerTermRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleAIntegerTerm=ruleAIntegerTerm();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAIntegerTerm; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAIntegerTerm"


    // $ANTLR start "ruleAIntegerTerm"
    // InternalReqSpec.g:8045:1: ruleAIntegerTerm returns [EObject current=null] : ( (lv_value_0_0= ruleAInt ) ) ;
    public final EObject ruleAIntegerTerm() throws RecognitionException {
        EObject current = null;

        AntlrDatatypeRuleToken lv_value_0_0 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:8051:2: ( ( (lv_value_0_0= ruleAInt ) ) )
            // InternalReqSpec.g:8052:2: ( (lv_value_0_0= ruleAInt ) )
            {
            // InternalReqSpec.g:8052:2: ( (lv_value_0_0= ruleAInt ) )
            // InternalReqSpec.g:8053:3: (lv_value_0_0= ruleAInt )
            {
            // InternalReqSpec.g:8053:3: (lv_value_0_0= ruleAInt )
            // InternalReqSpec.g:8054:4: lv_value_0_0= ruleAInt
            {
            if ( state.backtracking==0 ) {

              				newCompositeNode(grammarAccess.getAIntegerTermAccess().getValueAIntParserRuleCall_0());
              			
            }
            pushFollow(FollowSets000.FOLLOW_2);
            lv_value_0_0=ruleAInt();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				if (current==null) {
              					current = createModelElementForParent(grammarAccess.getAIntegerTermRule());
              				}
              				set(
              					current,
              					"value",
              					lv_value_0_0,
              					"org.osate.alisa.common.Common.AInt");
              				afterParserOrEnumRuleCall();
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAIntegerTerm"


    // $ANTLR start "entryRuleAInt"
    // InternalReqSpec.g:8074:1: entryRuleAInt returns [String current=null] : iv_ruleAInt= ruleAInt EOF ;
    public final String entryRuleAInt() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleAInt = null;


        try {
            // InternalReqSpec.g:8074:44: (iv_ruleAInt= ruleAInt EOF )
            // InternalReqSpec.g:8075:2: iv_ruleAInt= ruleAInt EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAIntRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleAInt=ruleAInt();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAInt.getText(); 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAInt"


    // $ANTLR start "ruleAInt"
    // InternalReqSpec.g:8081:1: ruleAInt returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : this_INT_0= RULE_INT ;
    public final AntlrDatatypeRuleToken ruleAInt() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token this_INT_0=null;


        	enterRule();

        try {
            // InternalReqSpec.g:8087:2: (this_INT_0= RULE_INT )
            // InternalReqSpec.g:8088:2: this_INT_0= RULE_INT
            {
            this_INT_0=(Token)match(input,RULE_INT,FollowSets000.FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              		current.merge(this_INT_0);
              	
            }
            if ( state.backtracking==0 ) {

              		newLeafNode(this_INT_0, grammarAccess.getAIntAccess().getINTTerminalRuleCall());
              	
            }

            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAInt"


    // $ANTLR start "entryRuleARealTerm"
    // InternalReqSpec.g:8098:1: entryRuleARealTerm returns [EObject current=null] : iv_ruleARealTerm= ruleARealTerm EOF ;
    public final EObject entryRuleARealTerm() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleARealTerm = null;


        try {
            // InternalReqSpec.g:8098:50: (iv_ruleARealTerm= ruleARealTerm EOF )
            // InternalReqSpec.g:8099:2: iv_ruleARealTerm= ruleARealTerm EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getARealTermRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleARealTerm=ruleARealTerm();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleARealTerm; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleARealTerm"


    // $ANTLR start "ruleARealTerm"
    // InternalReqSpec.g:8105:1: ruleARealTerm returns [EObject current=null] : ( (lv_value_0_0= ruleAReal ) ) ;
    public final EObject ruleARealTerm() throws RecognitionException {
        EObject current = null;

        AntlrDatatypeRuleToken lv_value_0_0 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:8111:2: ( ( (lv_value_0_0= ruleAReal ) ) )
            // InternalReqSpec.g:8112:2: ( (lv_value_0_0= ruleAReal ) )
            {
            // InternalReqSpec.g:8112:2: ( (lv_value_0_0= ruleAReal ) )
            // InternalReqSpec.g:8113:3: (lv_value_0_0= ruleAReal )
            {
            // InternalReqSpec.g:8113:3: (lv_value_0_0= ruleAReal )
            // InternalReqSpec.g:8114:4: lv_value_0_0= ruleAReal
            {
            if ( state.backtracking==0 ) {

              				newCompositeNode(grammarAccess.getARealTermAccess().getValueARealParserRuleCall_0());
              			
            }
            pushFollow(FollowSets000.FOLLOW_2);
            lv_value_0_0=ruleAReal();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				if (current==null) {
              					current = createModelElementForParent(grammarAccess.getARealTermRule());
              				}
              				set(
              					current,
              					"value",
              					lv_value_0_0,
              					"org.osate.alisa.common.Common.AReal");
              				afterParserOrEnumRuleCall();
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleARealTerm"


    // $ANTLR start "entryRuleAReal"
    // InternalReqSpec.g:8134:1: entryRuleAReal returns [String current=null] : iv_ruleAReal= ruleAReal EOF ;
    public final String entryRuleAReal() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleAReal = null;


        try {
            // InternalReqSpec.g:8134:45: (iv_ruleAReal= ruleAReal EOF )
            // InternalReqSpec.g:8135:2: iv_ruleAReal= ruleAReal EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getARealRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleAReal=ruleAReal();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAReal.getText(); 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAReal"


    // $ANTLR start "ruleAReal"
    // InternalReqSpec.g:8141:1: ruleAReal returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : this_REAL_LIT_0= RULE_REAL_LIT ;
    public final AntlrDatatypeRuleToken ruleAReal() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token this_REAL_LIT_0=null;


        	enterRule();

        try {
            // InternalReqSpec.g:8147:2: (this_REAL_LIT_0= RULE_REAL_LIT )
            // InternalReqSpec.g:8148:2: this_REAL_LIT_0= RULE_REAL_LIT
            {
            this_REAL_LIT_0=(Token)match(input,RULE_REAL_LIT,FollowSets000.FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              		current.merge(this_REAL_LIT_0);
              	
            }
            if ( state.backtracking==0 ) {

              		newLeafNode(this_REAL_LIT_0, grammarAccess.getARealAccess().getREAL_LITTerminalRuleCall());
              	
            }

            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAReal"


    // $ANTLR start "entryRuleABooleanLiteral"
    // InternalReqSpec.g:8158:1: entryRuleABooleanLiteral returns [EObject current=null] : iv_ruleABooleanLiteral= ruleABooleanLiteral EOF ;
    public final EObject entryRuleABooleanLiteral() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleABooleanLiteral = null;


        try {
            // InternalReqSpec.g:8158:56: (iv_ruleABooleanLiteral= ruleABooleanLiteral EOF )
            // InternalReqSpec.g:8159:2: iv_ruleABooleanLiteral= ruleABooleanLiteral EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getABooleanLiteralRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleABooleanLiteral=ruleABooleanLiteral();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleABooleanLiteral; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleABooleanLiteral"


    // $ANTLR start "ruleABooleanLiteral"
    // InternalReqSpec.g:8165:1: ruleABooleanLiteral returns [EObject current=null] : ( () ( ( (lv_value_1_0= 'true' ) ) | otherlv_2= 'false' ) ) ;
    public final EObject ruleABooleanLiteral() throws RecognitionException {
        EObject current = null;

        Token lv_value_1_0=null;
        Token otherlv_2=null;


        	enterRule();

        try {
            // InternalReqSpec.g:8171:2: ( ( () ( ( (lv_value_1_0= 'true' ) ) | otherlv_2= 'false' ) ) )
            // InternalReqSpec.g:8172:2: ( () ( ( (lv_value_1_0= 'true' ) ) | otherlv_2= 'false' ) )
            {
            // InternalReqSpec.g:8172:2: ( () ( ( (lv_value_1_0= 'true' ) ) | otherlv_2= 'false' ) )
            // InternalReqSpec.g:8173:3: () ( ( (lv_value_1_0= 'true' ) ) | otherlv_2= 'false' )
            {
            // InternalReqSpec.g:8173:3: ()
            // InternalReqSpec.g:8174:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getABooleanLiteralAccess().getBooleanLiteralAction_0(),
              					current);
              			
            }

            }

            // InternalReqSpec.g:8180:3: ( ( (lv_value_1_0= 'true' ) ) | otherlv_2= 'false' )
            int alt168=2;
            int LA168_0 = input.LA(1);

            if ( (LA168_0==106) ) {
                alt168=1;
            }
            else if ( (LA168_0==107) ) {
                alt168=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 168, 0, input);

                throw nvae;
            }
            switch (alt168) {
                case 1 :
                    // InternalReqSpec.g:8181:4: ( (lv_value_1_0= 'true' ) )
                    {
                    // InternalReqSpec.g:8181:4: ( (lv_value_1_0= 'true' ) )
                    // InternalReqSpec.g:8182:5: (lv_value_1_0= 'true' )
                    {
                    // InternalReqSpec.g:8182:5: (lv_value_1_0= 'true' )
                    // InternalReqSpec.g:8183:6: lv_value_1_0= 'true'
                    {
                    lv_value_1_0=(Token)match(input,106,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_value_1_0, grammarAccess.getABooleanLiteralAccess().getValueTrueKeyword_1_0_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getABooleanLiteralRule());
                      						}
                      						setWithLastConsumed(current, "value", true, "true");
                      					
                    }

                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalReqSpec.g:8196:4: otherlv_2= 'false'
                    {
                    otherlv_2=(Token)match(input,107,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_2, grammarAccess.getABooleanLiteralAccess().getFalseKeyword_1_1());
                      			
                    }

                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleABooleanLiteral"


    // $ANTLR start "entryRuleStringTerm"
    // InternalReqSpec.g:8205:1: entryRuleStringTerm returns [EObject current=null] : iv_ruleStringTerm= ruleStringTerm EOF ;
    public final EObject entryRuleStringTerm() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleStringTerm = null;


        try {
            // InternalReqSpec.g:8205:51: (iv_ruleStringTerm= ruleStringTerm EOF )
            // InternalReqSpec.g:8206:2: iv_ruleStringTerm= ruleStringTerm EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getStringTermRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleStringTerm=ruleStringTerm();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleStringTerm; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleStringTerm"


    // $ANTLR start "ruleStringTerm"
    // InternalReqSpec.g:8212:1: ruleStringTerm returns [EObject current=null] : ( (lv_value_0_0= ruleNoQuoteString ) ) ;
    public final EObject ruleStringTerm() throws RecognitionException {
        EObject current = null;

        AntlrDatatypeRuleToken lv_value_0_0 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:8218:2: ( ( (lv_value_0_0= ruleNoQuoteString ) ) )
            // InternalReqSpec.g:8219:2: ( (lv_value_0_0= ruleNoQuoteString ) )
            {
            // InternalReqSpec.g:8219:2: ( (lv_value_0_0= ruleNoQuoteString ) )
            // InternalReqSpec.g:8220:3: (lv_value_0_0= ruleNoQuoteString )
            {
            // InternalReqSpec.g:8220:3: (lv_value_0_0= ruleNoQuoteString )
            // InternalReqSpec.g:8221:4: lv_value_0_0= ruleNoQuoteString
            {
            if ( state.backtracking==0 ) {

              				newCompositeNode(grammarAccess.getStringTermAccess().getValueNoQuoteStringParserRuleCall_0());
              			
            }
            pushFollow(FollowSets000.FOLLOW_2);
            lv_value_0_0=ruleNoQuoteString();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				if (current==null) {
              					current = createModelElementForParent(grammarAccess.getStringTermRule());
              				}
              				set(
              					current,
              					"value",
              					lv_value_0_0,
              					"org.osate.alisa.common.Common.NoQuoteString");
              				afterParserOrEnumRuleCall();
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleStringTerm"


    // $ANTLR start "entryRuleNoQuoteString"
    // InternalReqSpec.g:8241:1: entryRuleNoQuoteString returns [String current=null] : iv_ruleNoQuoteString= ruleNoQuoteString EOF ;
    public final String entryRuleNoQuoteString() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleNoQuoteString = null;


        try {
            // InternalReqSpec.g:8241:53: (iv_ruleNoQuoteString= ruleNoQuoteString EOF )
            // InternalReqSpec.g:8242:2: iv_ruleNoQuoteString= ruleNoQuoteString EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getNoQuoteStringRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleNoQuoteString=ruleNoQuoteString();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleNoQuoteString.getText(); 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleNoQuoteString"


    // $ANTLR start "ruleNoQuoteString"
    // InternalReqSpec.g:8248:1: ruleNoQuoteString returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : this_STRING_0= RULE_STRING ;
    public final AntlrDatatypeRuleToken ruleNoQuoteString() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token this_STRING_0=null;


        	enterRule();

        try {
            // InternalReqSpec.g:8254:2: (this_STRING_0= RULE_STRING )
            // InternalReqSpec.g:8255:2: this_STRING_0= RULE_STRING
            {
            this_STRING_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              		current.merge(this_STRING_0);
              	
            }
            if ( state.backtracking==0 ) {

              		newLeafNode(this_STRING_0, grammarAccess.getNoQuoteStringAccess().getSTRINGTerminalRuleCall());
              	
            }

            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleNoQuoteString"


    // $ANTLR start "entryRuleAParenthesizedExpression"
    // InternalReqSpec.g:8265:1: entryRuleAParenthesizedExpression returns [EObject current=null] : iv_ruleAParenthesizedExpression= ruleAParenthesizedExpression EOF ;
    public final EObject entryRuleAParenthesizedExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAParenthesizedExpression = null;


        try {
            // InternalReqSpec.g:8265:65: (iv_ruleAParenthesizedExpression= ruleAParenthesizedExpression EOF )
            // InternalReqSpec.g:8266:2: iv_ruleAParenthesizedExpression= ruleAParenthesizedExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAParenthesizedExpressionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleAParenthesizedExpression=ruleAParenthesizedExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAParenthesizedExpression; 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAParenthesizedExpression"


    // $ANTLR start "ruleAParenthesizedExpression"
    // InternalReqSpec.g:8272:1: ruleAParenthesizedExpression returns [EObject current=null] : (otherlv_0= '(' this_AExpression_1= ruleAExpression otherlv_2= ')' ) ;
    public final EObject ruleAParenthesizedExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_2=null;
        EObject this_AExpression_1 = null;



        	enterRule();

        try {
            // InternalReqSpec.g:8278:2: ( (otherlv_0= '(' this_AExpression_1= ruleAExpression otherlv_2= ')' ) )
            // InternalReqSpec.g:8279:2: (otherlv_0= '(' this_AExpression_1= ruleAExpression otherlv_2= ')' )
            {
            // InternalReqSpec.g:8279:2: (otherlv_0= '(' this_AExpression_1= ruleAExpression otherlv_2= ')' )
            // InternalReqSpec.g:8280:3: otherlv_0= '(' this_AExpression_1= ruleAExpression otherlv_2= ')'
            {
            otherlv_0=(Token)match(input,52,FollowSets000.FOLLOW_62); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getAParenthesizedExpressionAccess().getLeftParenthesisKeyword_0());
              		
            }
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getAParenthesizedExpressionAccess().getAExpressionParserRuleCall_1());
              		
            }
            pushFollow(FollowSets000.FOLLOW_60);
            this_AExpression_1=ruleAExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current = this_AExpression_1;
              			afterParserOrEnumRuleCall();
              		
            }
            otherlv_2=(Token)match(input,53,FollowSets000.FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_2, grammarAccess.getAParenthesizedExpressionAccess().getRightParenthesisKeyword_2());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAParenthesizedExpression"


    // $ANTLR start "entryRuleComponentCategory"
    // InternalReqSpec.g:8300:1: entryRuleComponentCategory returns [String current=null] : iv_ruleComponentCategory= ruleComponentCategory EOF ;
    public final String entryRuleComponentCategory() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleComponentCategory = null;


        try {
            // InternalReqSpec.g:8300:57: (iv_ruleComponentCategory= ruleComponentCategory EOF )
            // InternalReqSpec.g:8301:2: iv_ruleComponentCategory= ruleComponentCategory EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getComponentCategoryRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleComponentCategory=ruleComponentCategory();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleComponentCategory.getText(); 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleComponentCategory"


    // $ANTLR start "ruleComponentCategory"
    // InternalReqSpec.g:8307:1: ruleComponentCategory returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= 'abstract' | kw= 'bus' | kw= 'data' | kw= 'device' | kw= 'memory' | kw= 'process' | kw= 'processor' | kw= 'subprogram' | (kw= 'subprogram' kw= 'group' ) | kw= 'system' | (kw= 'thread' kw= 'group' ) | kw= 'thread' | (kw= 'virtual' kw= 'bus' ) | (kw= 'virtual' kw= 'processor' ) ) ;
    public final AntlrDatatypeRuleToken ruleComponentCategory() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;


        	enterRule();

        try {
            // InternalReqSpec.g:8313:2: ( (kw= 'abstract' | kw= 'bus' | kw= 'data' | kw= 'device' | kw= 'memory' | kw= 'process' | kw= 'processor' | kw= 'subprogram' | (kw= 'subprogram' kw= 'group' ) | kw= 'system' | (kw= 'thread' kw= 'group' ) | kw= 'thread' | (kw= 'virtual' kw= 'bus' ) | (kw= 'virtual' kw= 'processor' ) ) )
            // InternalReqSpec.g:8314:2: (kw= 'abstract' | kw= 'bus' | kw= 'data' | kw= 'device' | kw= 'memory' | kw= 'process' | kw= 'processor' | kw= 'subprogram' | (kw= 'subprogram' kw= 'group' ) | kw= 'system' | (kw= 'thread' kw= 'group' ) | kw= 'thread' | (kw= 'virtual' kw= 'bus' ) | (kw= 'virtual' kw= 'processor' ) )
            {
            // InternalReqSpec.g:8314:2: (kw= 'abstract' | kw= 'bus' | kw= 'data' | kw= 'device' | kw= 'memory' | kw= 'process' | kw= 'processor' | kw= 'subprogram' | (kw= 'subprogram' kw= 'group' ) | kw= 'system' | (kw= 'thread' kw= 'group' ) | kw= 'thread' | (kw= 'virtual' kw= 'bus' ) | (kw= 'virtual' kw= 'processor' ) )
            int alt169=14;
            alt169 = dfa169.predict(input);
            switch (alt169) {
                case 1 :
                    // InternalReqSpec.g:8315:3: kw= 'abstract'
                    {
                    kw=(Token)match(input,108,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getComponentCategoryAccess().getAbstractKeyword_0());
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalReqSpec.g:8321:3: kw= 'bus'
                    {
                    kw=(Token)match(input,109,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getComponentCategoryAccess().getBusKeyword_1());
                      		
                    }

                    }
                    break;
                case 3 :
                    // InternalReqSpec.g:8327:3: kw= 'data'
                    {
                    kw=(Token)match(input,110,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getComponentCategoryAccess().getDataKeyword_2());
                      		
                    }

                    }
                    break;
                case 4 :
                    // InternalReqSpec.g:8333:3: kw= 'device'
                    {
                    kw=(Token)match(input,111,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getComponentCategoryAccess().getDeviceKeyword_3());
                      		
                    }

                    }
                    break;
                case 5 :
                    // InternalReqSpec.g:8339:3: kw= 'memory'
                    {
                    kw=(Token)match(input,112,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getComponentCategoryAccess().getMemoryKeyword_4());
                      		
                    }

                    }
                    break;
                case 6 :
                    // InternalReqSpec.g:8345:3: kw= 'process'
                    {
                    kw=(Token)match(input,113,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getComponentCategoryAccess().getProcessKeyword_5());
                      		
                    }

                    }
                    break;
                case 7 :
                    // InternalReqSpec.g:8351:3: kw= 'processor'
                    {
                    kw=(Token)match(input,114,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getComponentCategoryAccess().getProcessorKeyword_6());
                      		
                    }

                    }
                    break;
                case 8 :
                    // InternalReqSpec.g:8357:3: kw= 'subprogram'
                    {
                    kw=(Token)match(input,115,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getComponentCategoryAccess().getSubprogramKeyword_7());
                      		
                    }

                    }
                    break;
                case 9 :
                    // InternalReqSpec.g:8363:3: (kw= 'subprogram' kw= 'group' )
                    {
                    // InternalReqSpec.g:8363:3: (kw= 'subprogram' kw= 'group' )
                    // InternalReqSpec.g:8364:4: kw= 'subprogram' kw= 'group'
                    {
                    kw=(Token)match(input,115,FollowSets000.FOLLOW_99); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(kw);
                      				newLeafNode(kw, grammarAccess.getComponentCategoryAccess().getSubprogramKeyword_8_0());
                      			
                    }
                    kw=(Token)match(input,116,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(kw);
                      				newLeafNode(kw, grammarAccess.getComponentCategoryAccess().getGroupKeyword_8_1());
                      			
                    }

                    }


                    }
                    break;
                case 10 :
                    // InternalReqSpec.g:8376:3: kw= 'system'
                    {
                    kw=(Token)match(input,29,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getComponentCategoryAccess().getSystemKeyword_9());
                      		
                    }

                    }
                    break;
                case 11 :
                    // InternalReqSpec.g:8382:3: (kw= 'thread' kw= 'group' )
                    {
                    // InternalReqSpec.g:8382:3: (kw= 'thread' kw= 'group' )
                    // InternalReqSpec.g:8383:4: kw= 'thread' kw= 'group'
                    {
                    kw=(Token)match(input,117,FollowSets000.FOLLOW_99); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(kw);
                      				newLeafNode(kw, grammarAccess.getComponentCategoryAccess().getThreadKeyword_10_0());
                      			
                    }
                    kw=(Token)match(input,116,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(kw);
                      				newLeafNode(kw, grammarAccess.getComponentCategoryAccess().getGroupKeyword_10_1());
                      			
                    }

                    }


                    }
                    break;
                case 12 :
                    // InternalReqSpec.g:8395:3: kw= 'thread'
                    {
                    kw=(Token)match(input,117,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getComponentCategoryAccess().getThreadKeyword_11());
                      		
                    }

                    }
                    break;
                case 13 :
                    // InternalReqSpec.g:8401:3: (kw= 'virtual' kw= 'bus' )
                    {
                    // InternalReqSpec.g:8401:3: (kw= 'virtual' kw= 'bus' )
                    // InternalReqSpec.g:8402:4: kw= 'virtual' kw= 'bus'
                    {
                    kw=(Token)match(input,118,FollowSets000.FOLLOW_100); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(kw);
                      				newLeafNode(kw, grammarAccess.getComponentCategoryAccess().getVirtualKeyword_12_0());
                      			
                    }
                    kw=(Token)match(input,109,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(kw);
                      				newLeafNode(kw, grammarAccess.getComponentCategoryAccess().getBusKeyword_12_1());
                      			
                    }

                    }


                    }
                    break;
                case 14 :
                    // InternalReqSpec.g:8414:3: (kw= 'virtual' kw= 'processor' )
                    {
                    // InternalReqSpec.g:8414:3: (kw= 'virtual' kw= 'processor' )
                    // InternalReqSpec.g:8415:4: kw= 'virtual' kw= 'processor'
                    {
                    kw=(Token)match(input,118,FollowSets000.FOLLOW_101); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(kw);
                      				newLeafNode(kw, grammarAccess.getComponentCategoryAccess().getVirtualKeyword_13_0());
                      			
                    }
                    kw=(Token)match(input,114,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(kw);
                      				newLeafNode(kw, grammarAccess.getComponentCategoryAccess().getProcessorKeyword_13_1());
                      			
                    }

                    }


                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleComponentCategory"


    // $ANTLR start "entryRuleAadlClassifierReference"
    // InternalReqSpec.g:8430:1: entryRuleAadlClassifierReference returns [String current=null] : iv_ruleAadlClassifierReference= ruleAadlClassifierReference EOF ;
    public final String entryRuleAadlClassifierReference() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleAadlClassifierReference = null;


        try {
            // InternalReqSpec.g:8430:63: (iv_ruleAadlClassifierReference= ruleAadlClassifierReference EOF )
            // InternalReqSpec.g:8431:2: iv_ruleAadlClassifierReference= ruleAadlClassifierReference EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAadlClassifierReferenceRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleAadlClassifierReference=ruleAadlClassifierReference();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAadlClassifierReference.getText(); 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAadlClassifierReference"


    // $ANTLR start "ruleAadlClassifierReference"
    // InternalReqSpec.g:8437:1: ruleAadlClassifierReference returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_ID_0= RULE_ID (kw= '::' this_ID_2= RULE_ID )+ (kw= '.' this_ID_4= RULE_ID )? ) ;
    public final AntlrDatatypeRuleToken ruleAadlClassifierReference() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token this_ID_0=null;
        Token kw=null;
        Token this_ID_2=null;
        Token this_ID_4=null;


        	enterRule();

        try {
            // InternalReqSpec.g:8443:2: ( (this_ID_0= RULE_ID (kw= '::' this_ID_2= RULE_ID )+ (kw= '.' this_ID_4= RULE_ID )? ) )
            // InternalReqSpec.g:8444:2: (this_ID_0= RULE_ID (kw= '::' this_ID_2= RULE_ID )+ (kw= '.' this_ID_4= RULE_ID )? )
            {
            // InternalReqSpec.g:8444:2: (this_ID_0= RULE_ID (kw= '::' this_ID_2= RULE_ID )+ (kw= '.' this_ID_4= RULE_ID )? )
            // InternalReqSpec.g:8445:3: this_ID_0= RULE_ID (kw= '::' this_ID_2= RULE_ID )+ (kw= '.' this_ID_4= RULE_ID )?
            {
            this_ID_0=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_102); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current.merge(this_ID_0);
              		
            }
            if ( state.backtracking==0 ) {

              			newLeafNode(this_ID_0, grammarAccess.getAadlClassifierReferenceAccess().getIDTerminalRuleCall_0());
              		
            }
            // InternalReqSpec.g:8452:3: (kw= '::' this_ID_2= RULE_ID )+
            int cnt170=0;
            loop170:
            do {
                int alt170=2;
                int LA170_0 = input.LA(1);

                if ( (LA170_0==119) ) {
                    alt170=1;
                }


                switch (alt170) {
            	case 1 :
            	    // InternalReqSpec.g:8453:4: kw= '::' this_ID_2= RULE_ID
            	    {
            	    kw=(Token)match(input,119,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				current.merge(kw);
            	      				newLeafNode(kw, grammarAccess.getAadlClassifierReferenceAccess().getColonColonKeyword_1_0());
            	      			
            	    }
            	    this_ID_2=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_103); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				current.merge(this_ID_2);
            	      			
            	    }
            	    if ( state.backtracking==0 ) {

            	      				newLeafNode(this_ID_2, grammarAccess.getAadlClassifierReferenceAccess().getIDTerminalRuleCall_1_1());
            	      			
            	    }

            	    }
            	    break;

            	default :
            	    if ( cnt170 >= 1 ) break loop170;
            	    if (state.backtracking>0) {state.failed=true; return current;}
                        EarlyExitException eee =
                            new EarlyExitException(170, input);
                        throw eee;
                }
                cnt170++;
            } while (true);

            // InternalReqSpec.g:8466:3: (kw= '.' this_ID_4= RULE_ID )?
            int alt171=2;
            int LA171_0 = input.LA(1);

            if ( (LA171_0==65) ) {
                alt171=1;
            }
            switch (alt171) {
                case 1 :
                    // InternalReqSpec.g:8467:4: kw= '.' this_ID_4= RULE_ID
                    {
                    kw=(Token)match(input,65,FollowSets000.FOLLOW_4); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(kw);
                      				newLeafNode(kw, grammarAccess.getAadlClassifierReferenceAccess().getFullStopKeyword_2_0());
                      			
                    }
                    this_ID_4=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(this_ID_4);
                      			
                    }
                    if ( state.backtracking==0 ) {

                      				newLeafNode(this_ID_4, grammarAccess.getAadlClassifierReferenceAccess().getIDTerminalRuleCall_2_1());
                      			
                    }

                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAadlClassifierReference"


    // $ANTLR start "entryRuleAADLPROPERTYREFERENCE"
    // InternalReqSpec.g:8484:1: entryRuleAADLPROPERTYREFERENCE returns [String current=null] : iv_ruleAADLPROPERTYREFERENCE= ruleAADLPROPERTYREFERENCE EOF ;
    public final String entryRuleAADLPROPERTYREFERENCE() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleAADLPROPERTYREFERENCE = null;


        try {
            // InternalReqSpec.g:8484:61: (iv_ruleAADLPROPERTYREFERENCE= ruleAADLPROPERTYREFERENCE EOF )
            // InternalReqSpec.g:8485:2: iv_ruleAADLPROPERTYREFERENCE= ruleAADLPROPERTYREFERENCE EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAADLPROPERTYREFERENCERule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleAADLPROPERTYREFERENCE=ruleAADLPROPERTYREFERENCE();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAADLPROPERTYREFERENCE.getText(); 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAADLPROPERTYREFERENCE"


    // $ANTLR start "ruleAADLPROPERTYREFERENCE"
    // InternalReqSpec.g:8491:1: ruleAADLPROPERTYREFERENCE returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_ID_0= RULE_ID (kw= '::' this_ID_2= RULE_ID )? ) ;
    public final AntlrDatatypeRuleToken ruleAADLPROPERTYREFERENCE() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token this_ID_0=null;
        Token kw=null;
        Token this_ID_2=null;


        	enterRule();

        try {
            // InternalReqSpec.g:8497:2: ( (this_ID_0= RULE_ID (kw= '::' this_ID_2= RULE_ID )? ) )
            // InternalReqSpec.g:8498:2: (this_ID_0= RULE_ID (kw= '::' this_ID_2= RULE_ID )? )
            {
            // InternalReqSpec.g:8498:2: (this_ID_0= RULE_ID (kw= '::' this_ID_2= RULE_ID )? )
            // InternalReqSpec.g:8499:3: this_ID_0= RULE_ID (kw= '::' this_ID_2= RULE_ID )?
            {
            this_ID_0=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_104); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current.merge(this_ID_0);
              		
            }
            if ( state.backtracking==0 ) {

              			newLeafNode(this_ID_0, grammarAccess.getAADLPROPERTYREFERENCEAccess().getIDTerminalRuleCall_0());
              		
            }
            // InternalReqSpec.g:8506:3: (kw= '::' this_ID_2= RULE_ID )?
            int alt172=2;
            int LA172_0 = input.LA(1);

            if ( (LA172_0==119) ) {
                alt172=1;
            }
            switch (alt172) {
                case 1 :
                    // InternalReqSpec.g:8507:4: kw= '::' this_ID_2= RULE_ID
                    {
                    kw=(Token)match(input,119,FollowSets000.FOLLOW_4); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(kw);
                      				newLeafNode(kw, grammarAccess.getAADLPROPERTYREFERENCEAccess().getColonColonKeyword_1_0());
                      			
                    }
                    this_ID_2=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(this_ID_2);
                      			
                    }
                    if ( state.backtracking==0 ) {

                      				newLeafNode(this_ID_2, grammarAccess.getAADLPROPERTYREFERENCEAccess().getIDTerminalRuleCall_1_1());
                      			
                    }

                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAADLPROPERTYREFERENCE"


    // $ANTLR start "entryRuleQualifiedName"
    // InternalReqSpec.g:8524:1: entryRuleQualifiedName returns [String current=null] : iv_ruleQualifiedName= ruleQualifiedName EOF ;
    public final String entryRuleQualifiedName() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleQualifiedName = null;


        try {
            // InternalReqSpec.g:8524:53: (iv_ruleQualifiedName= ruleQualifiedName EOF )
            // InternalReqSpec.g:8525:2: iv_ruleQualifiedName= ruleQualifiedName EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getQualifiedNameRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleQualifiedName=ruleQualifiedName();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleQualifiedName.getText(); 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleQualifiedName"


    // $ANTLR start "ruleQualifiedName"
    // InternalReqSpec.g:8531:1: ruleQualifiedName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* ) ;
    public final AntlrDatatypeRuleToken ruleQualifiedName() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token this_ID_0=null;
        Token kw=null;
        Token this_ID_2=null;


        	enterRule();

        try {
            // InternalReqSpec.g:8537:2: ( (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* ) )
            // InternalReqSpec.g:8538:2: (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* )
            {
            // InternalReqSpec.g:8538:2: (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* )
            // InternalReqSpec.g:8539:3: this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )*
            {
            this_ID_0=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_83); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current.merge(this_ID_0);
              		
            }
            if ( state.backtracking==0 ) {

              			newLeafNode(this_ID_0, grammarAccess.getQualifiedNameAccess().getIDTerminalRuleCall_0());
              		
            }
            // InternalReqSpec.g:8546:3: (kw= '.' this_ID_2= RULE_ID )*
            loop173:
            do {
                int alt173=2;
                int LA173_0 = input.LA(1);

                if ( (LA173_0==65) ) {
                    alt173=1;
                }


                switch (alt173) {
            	case 1 :
            	    // InternalReqSpec.g:8547:4: kw= '.' this_ID_2= RULE_ID
            	    {
            	    kw=(Token)match(input,65,FollowSets000.FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				current.merge(kw);
            	      				newLeafNode(kw, grammarAccess.getQualifiedNameAccess().getFullStopKeyword_1_0());
            	      			
            	    }
            	    this_ID_2=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_83); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				current.merge(this_ID_2);
            	      			
            	    }
            	    if ( state.backtracking==0 ) {

            	      				newLeafNode(this_ID_2, grammarAccess.getQualifiedNameAccess().getIDTerminalRuleCall_1_1());
            	      			
            	    }

            	    }
            	    break;

            	default :
            	    break loop173;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleQualifiedName"


    // $ANTLR start "entryRuleThisKeyword"
    // InternalReqSpec.g:8564:1: entryRuleThisKeyword returns [String current=null] : iv_ruleThisKeyword= ruleThisKeyword EOF ;
    public final String entryRuleThisKeyword() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleThisKeyword = null;


        try {
            // InternalReqSpec.g:8564:51: (iv_ruleThisKeyword= ruleThisKeyword EOF )
            // InternalReqSpec.g:8565:2: iv_ruleThisKeyword= ruleThisKeyword EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getThisKeywordRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleThisKeyword=ruleThisKeyword();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleThisKeyword.getText(); 
            }
            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleThisKeyword"


    // $ANTLR start "ruleThisKeyword"
    // InternalReqSpec.g:8571:1: ruleThisKeyword returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : kw= 'this' ;
    public final AntlrDatatypeRuleToken ruleThisKeyword() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;


        	enterRule();

        try {
            // InternalReqSpec.g:8577:2: (kw= 'this' )
            // InternalReqSpec.g:8578:2: kw= 'this'
            {
            kw=(Token)match(input,67,FollowSets000.FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              		current.merge(kw);
              		newLeafNode(kw, grammarAccess.getThisKeywordAccess().getThisKeyword());
              	
            }

            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleThisKeyword"


    // $ANTLR start "ruleTargetType"
    // InternalReqSpec.g:8586:1: ruleTargetType returns [Enumerator current=null] : ( (enumLiteral_0= 'component' ) | (enumLiteral_1= 'feature' ) | (enumLiteral_2= 'connection' ) | (enumLiteral_3= 'flow' ) | (enumLiteral_4= 'mode' ) | (enumLiteral_5= 'element' ) | (enumLiteral_6= 'root' ) ) ;
    public final Enumerator ruleTargetType() throws RecognitionException {
        Enumerator current = null;

        Token enumLiteral_0=null;
        Token enumLiteral_1=null;
        Token enumLiteral_2=null;
        Token enumLiteral_3=null;
        Token enumLiteral_4=null;
        Token enumLiteral_5=null;
        Token enumLiteral_6=null;


        	enterRule();

        try {
            // InternalReqSpec.g:8592:2: ( ( (enumLiteral_0= 'component' ) | (enumLiteral_1= 'feature' ) | (enumLiteral_2= 'connection' ) | (enumLiteral_3= 'flow' ) | (enumLiteral_4= 'mode' ) | (enumLiteral_5= 'element' ) | (enumLiteral_6= 'root' ) ) )
            // InternalReqSpec.g:8593:2: ( (enumLiteral_0= 'component' ) | (enumLiteral_1= 'feature' ) | (enumLiteral_2= 'connection' ) | (enumLiteral_3= 'flow' ) | (enumLiteral_4= 'mode' ) | (enumLiteral_5= 'element' ) | (enumLiteral_6= 'root' ) )
            {
            // InternalReqSpec.g:8593:2: ( (enumLiteral_0= 'component' ) | (enumLiteral_1= 'feature' ) | (enumLiteral_2= 'connection' ) | (enumLiteral_3= 'flow' ) | (enumLiteral_4= 'mode' ) | (enumLiteral_5= 'element' ) | (enumLiteral_6= 'root' ) )
            int alt174=7;
            switch ( input.LA(1) ) {
            case 120:
                {
                alt174=1;
                }
                break;
            case 121:
                {
                alt174=2;
                }
                break;
            case 122:
                {
                alt174=3;
                }
                break;
            case 123:
                {
                alt174=4;
                }
                break;
            case 48:
                {
                alt174=5;
                }
                break;
            case 79:
                {
                alt174=6;
                }
                break;
            case 124:
                {
                alt174=7;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 174, 0, input);

                throw nvae;
            }

            switch (alt174) {
                case 1 :
                    // InternalReqSpec.g:8594:3: (enumLiteral_0= 'component' )
                    {
                    // InternalReqSpec.g:8594:3: (enumLiteral_0= 'component' )
                    // InternalReqSpec.g:8595:4: enumLiteral_0= 'component'
                    {
                    enumLiteral_0=(Token)match(input,120,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current = grammarAccess.getTargetTypeAccess().getCOMPONENTEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                      				newLeafNode(enumLiteral_0, grammarAccess.getTargetTypeAccess().getCOMPONENTEnumLiteralDeclaration_0());
                      			
                    }

                    }


                    }
                    break;
                case 2 :
                    // InternalReqSpec.g:8602:3: (enumLiteral_1= 'feature' )
                    {
                    // InternalReqSpec.g:8602:3: (enumLiteral_1= 'feature' )
                    // InternalReqSpec.g:8603:4: enumLiteral_1= 'feature'
                    {
                    enumLiteral_1=(Token)match(input,121,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current = grammarAccess.getTargetTypeAccess().getFEATUREEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                      				newLeafNode(enumLiteral_1, grammarAccess.getTargetTypeAccess().getFEATUREEnumLiteralDeclaration_1());
                      			
                    }

                    }


                    }
                    break;
                case 3 :
                    // InternalReqSpec.g:8610:3: (enumLiteral_2= 'connection' )
                    {
                    // InternalReqSpec.g:8610:3: (enumLiteral_2= 'connection' )
                    // InternalReqSpec.g:8611:4: enumLiteral_2= 'connection'
                    {
                    enumLiteral_2=(Token)match(input,122,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current = grammarAccess.getTargetTypeAccess().getCONNECTIONEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
                      				newLeafNode(enumLiteral_2, grammarAccess.getTargetTypeAccess().getCONNECTIONEnumLiteralDeclaration_2());
                      			
                    }

                    }


                    }
                    break;
                case 4 :
                    // InternalReqSpec.g:8618:3: (enumLiteral_3= 'flow' )
                    {
                    // InternalReqSpec.g:8618:3: (enumLiteral_3= 'flow' )
                    // InternalReqSpec.g:8619:4: enumLiteral_3= 'flow'
                    {
                    enumLiteral_3=(Token)match(input,123,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current = grammarAccess.getTargetTypeAccess().getFLOWEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
                      				newLeafNode(enumLiteral_3, grammarAccess.getTargetTypeAccess().getFLOWEnumLiteralDeclaration_3());
                      			
                    }

                    }


                    }
                    break;
                case 5 :
                    // InternalReqSpec.g:8626:3: (enumLiteral_4= 'mode' )
                    {
                    // InternalReqSpec.g:8626:3: (enumLiteral_4= 'mode' )
                    // InternalReqSpec.g:8627:4: enumLiteral_4= 'mode'
                    {
                    enumLiteral_4=(Token)match(input,48,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current = grammarAccess.getTargetTypeAccess().getMODEEnumLiteralDeclaration_4().getEnumLiteral().getInstance();
                      				newLeafNode(enumLiteral_4, grammarAccess.getTargetTypeAccess().getMODEEnumLiteralDeclaration_4());
                      			
                    }

                    }


                    }
                    break;
                case 6 :
                    // InternalReqSpec.g:8634:3: (enumLiteral_5= 'element' )
                    {
                    // InternalReqSpec.g:8634:3: (enumLiteral_5= 'element' )
                    // InternalReqSpec.g:8635:4: enumLiteral_5= 'element'
                    {
                    enumLiteral_5=(Token)match(input,79,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current = grammarAccess.getTargetTypeAccess().getELEMENTEnumLiteralDeclaration_5().getEnumLiteral().getInstance();
                      				newLeafNode(enumLiteral_5, grammarAccess.getTargetTypeAccess().getELEMENTEnumLiteralDeclaration_5());
                      			
                    }

                    }


                    }
                    break;
                case 7 :
                    // InternalReqSpec.g:8642:3: (enumLiteral_6= 'root' )
                    {
                    // InternalReqSpec.g:8642:3: (enumLiteral_6= 'root' )
                    // InternalReqSpec.g:8643:4: enumLiteral_6= 'root'
                    {
                    enumLiteral_6=(Token)match(input,124,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current = grammarAccess.getTargetTypeAccess().getROOTEnumLiteralDeclaration_6().getEnumLiteral().getInstance();
                      				newLeafNode(enumLiteral_6, grammarAccess.getTargetTypeAccess().getROOTEnumLiteralDeclaration_6());
                      			
                    }

                    }


                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleTargetType"

    // $ANTLR start synpred1_InternalReqSpec
    public final void synpred1_InternalReqSpec_fragment() throws RecognitionException {   
        // InternalReqSpec.g:5611:4: ( ( 'this' ) )
        // InternalReqSpec.g:5611:5: ( 'this' )
        {
        // InternalReqSpec.g:5611:5: ( 'this' )
        // InternalReqSpec.g:5612:5: 'this'
        {
        match(input,67,FollowSets000.FOLLOW_2); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred1_InternalReqSpec

    // $ANTLR start synpred2_InternalReqSpec
    public final void synpred2_InternalReqSpec_fragment() throws RecognitionException {   
        // InternalReqSpec.g:5630:4: ( ( ruleImageReference ) )
        // InternalReqSpec.g:5630:5: ( ruleImageReference )
        {
        // InternalReqSpec.g:5630:5: ( ruleImageReference )
        // InternalReqSpec.g:5631:5: ruleImageReference
        {
        pushFollow(FollowSets000.FOLLOW_2);
        ruleImageReference();

        state._fsp--;
        if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred2_InternalReqSpec

    // $ANTLR start synpred3_InternalReqSpec
    public final void synpred3_InternalReqSpec_fragment() throws RecognitionException {   
        // InternalReqSpec.g:6266:6: ( ( () '#' ) )
        // InternalReqSpec.g:6266:7: ( () '#' )
        {
        // InternalReqSpec.g:6266:7: ( () '#' )
        // InternalReqSpec.g:6267:7: () '#'
        {
        // InternalReqSpec.g:6267:7: ()
        // InternalReqSpec.g:6268:7: 
        {
        }

        match(input,59,FollowSets000.FOLLOW_2); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred3_InternalReqSpec

    // $ANTLR start synpred4_InternalReqSpec
    public final void synpred4_InternalReqSpec_fragment() throws RecognitionException {   
        // InternalReqSpec.g:6691:5: ( ( () ( ( ruleOpOr ) ) ) )
        // InternalReqSpec.g:6691:6: ( () ( ( ruleOpOr ) ) )
        {
        // InternalReqSpec.g:6691:6: ( () ( ( ruleOpOr ) ) )
        // InternalReqSpec.g:6692:6: () ( ( ruleOpOr ) )
        {
        // InternalReqSpec.g:6692:6: ()
        // InternalReqSpec.g:6693:6: 
        {
        }

        // InternalReqSpec.g:6694:6: ( ( ruleOpOr ) )
        // InternalReqSpec.g:6695:7: ( ruleOpOr )
        {
        // InternalReqSpec.g:6695:7: ( ruleOpOr )
        // InternalReqSpec.g:6696:8: ruleOpOr
        {
        pushFollow(FollowSets000.FOLLOW_2);
        ruleOpOr();

        state._fsp--;
        if (state.failed) return ;

        }


        }


        }


        }
    }
    // $ANTLR end synpred4_InternalReqSpec

    // $ANTLR start synpred5_InternalReqSpec
    public final void synpred5_InternalReqSpec_fragment() throws RecognitionException {   
        // InternalReqSpec.g:6809:5: ( ( () ( ( ruleOpAnd ) ) ) )
        // InternalReqSpec.g:6809:6: ( () ( ( ruleOpAnd ) ) )
        {
        // InternalReqSpec.g:6809:6: ( () ( ( ruleOpAnd ) ) )
        // InternalReqSpec.g:6810:6: () ( ( ruleOpAnd ) )
        {
        // InternalReqSpec.g:6810:6: ()
        // InternalReqSpec.g:6811:6: 
        {
        }

        // InternalReqSpec.g:6812:6: ( ( ruleOpAnd ) )
        // InternalReqSpec.g:6813:7: ( ruleOpAnd )
        {
        // InternalReqSpec.g:6813:7: ( ruleOpAnd )
        // InternalReqSpec.g:6814:8: ruleOpAnd
        {
        pushFollow(FollowSets000.FOLLOW_2);
        ruleOpAnd();

        state._fsp--;
        if (state.failed) return ;

        }


        }


        }


        }
    }
    // $ANTLR end synpred5_InternalReqSpec

    // $ANTLR start synpred6_InternalReqSpec
    public final void synpred6_InternalReqSpec_fragment() throws RecognitionException {   
        // InternalReqSpec.g:6927:5: ( ( () ( ( ruleOpEquality ) ) ) )
        // InternalReqSpec.g:6927:6: ( () ( ( ruleOpEquality ) ) )
        {
        // InternalReqSpec.g:6927:6: ( () ( ( ruleOpEquality ) ) )
        // InternalReqSpec.g:6928:6: () ( ( ruleOpEquality ) )
        {
        // InternalReqSpec.g:6928:6: ()
        // InternalReqSpec.g:6929:6: 
        {
        }

        // InternalReqSpec.g:6930:6: ( ( ruleOpEquality ) )
        // InternalReqSpec.g:6931:7: ( ruleOpEquality )
        {
        // InternalReqSpec.g:6931:7: ( ruleOpEquality )
        // InternalReqSpec.g:6932:8: ruleOpEquality
        {
        pushFollow(FollowSets000.FOLLOW_2);
        ruleOpEquality();

        state._fsp--;
        if (state.failed) return ;

        }


        }


        }


        }
    }
    // $ANTLR end synpred6_InternalReqSpec

    // $ANTLR start synpred7_InternalReqSpec
    public final void synpred7_InternalReqSpec_fragment() throws RecognitionException {   
        // InternalReqSpec.g:7045:5: ( ( () ( ( ruleOpCompare ) ) ) )
        // InternalReqSpec.g:7045:6: ( () ( ( ruleOpCompare ) ) )
        {
        // InternalReqSpec.g:7045:6: ( () ( ( ruleOpCompare ) ) )
        // InternalReqSpec.g:7046:6: () ( ( ruleOpCompare ) )
        {
        // InternalReqSpec.g:7046:6: ()
        // InternalReqSpec.g:7047:6: 
        {
        }

        // InternalReqSpec.g:7048:6: ( ( ruleOpCompare ) )
        // InternalReqSpec.g:7049:7: ( ruleOpCompare )
        {
        // InternalReqSpec.g:7049:7: ( ruleOpCompare )
        // InternalReqSpec.g:7050:8: ruleOpCompare
        {
        pushFollow(FollowSets000.FOLLOW_2);
        ruleOpCompare();

        state._fsp--;
        if (state.failed) return ;

        }


        }


        }


        }
    }
    // $ANTLR end synpred7_InternalReqSpec

    // $ANTLR start synpred8_InternalReqSpec
    public final void synpred8_InternalReqSpec_fragment() throws RecognitionException {   
        // InternalReqSpec.g:7181:5: ( ( () ( ( ruleOpAdd ) ) ) )
        // InternalReqSpec.g:7181:6: ( () ( ( ruleOpAdd ) ) )
        {
        // InternalReqSpec.g:7181:6: ( () ( ( ruleOpAdd ) ) )
        // InternalReqSpec.g:7182:6: () ( ( ruleOpAdd ) )
        {
        // InternalReqSpec.g:7182:6: ()
        // InternalReqSpec.g:7183:6: 
        {
        }

        // InternalReqSpec.g:7184:6: ( ( ruleOpAdd ) )
        // InternalReqSpec.g:7185:7: ( ruleOpAdd )
        {
        // InternalReqSpec.g:7185:7: ( ruleOpAdd )
        // InternalReqSpec.g:7186:8: ruleOpAdd
        {
        pushFollow(FollowSets000.FOLLOW_2);
        ruleOpAdd();

        state._fsp--;
        if (state.failed) return ;

        }


        }


        }


        }
    }
    // $ANTLR end synpred8_InternalReqSpec

    // $ANTLR start synpred9_InternalReqSpec
    public final void synpred9_InternalReqSpec_fragment() throws RecognitionException {   
        // InternalReqSpec.g:7299:5: ( ( () ( ( ruleOpMulti ) ) ) )
        // InternalReqSpec.g:7299:6: ( () ( ( ruleOpMulti ) ) )
        {
        // InternalReqSpec.g:7299:6: ( () ( ( ruleOpMulti ) ) )
        // InternalReqSpec.g:7300:6: () ( ( ruleOpMulti ) )
        {
        // InternalReqSpec.g:7300:6: ()
        // InternalReqSpec.g:7301:6: 
        {
        }

        // InternalReqSpec.g:7302:6: ( ( ruleOpMulti ) )
        // InternalReqSpec.g:7303:7: ( ruleOpMulti )
        {
        // InternalReqSpec.g:7303:7: ( ruleOpMulti )
        // InternalReqSpec.g:7304:8: ruleOpMulti
        {
        pushFollow(FollowSets000.FOLLOW_2);
        ruleOpMulti();

        state._fsp--;
        if (state.failed) return ;

        }


        }


        }


        }
    }
    // $ANTLR end synpred9_InternalReqSpec

    // $ANTLR start synpred11_InternalReqSpec
    public final void synpred11_InternalReqSpec_fragment() throws RecognitionException {   
        // InternalReqSpec.g:7849:5: ( 'delta' )
        // InternalReqSpec.g:7849:6: 'delta'
        {
        match(input,101,FollowSets000.FOLLOW_2); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred11_InternalReqSpec

    // Delegated rules

    public final boolean synpred7_InternalReqSpec() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred7_InternalReqSpec_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred9_InternalReqSpec() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred9_InternalReqSpec_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred11_InternalReqSpec() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred11_InternalReqSpec_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred3_InternalReqSpec() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred3_InternalReqSpec_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred4_InternalReqSpec() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred4_InternalReqSpec_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred8_InternalReqSpec() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred8_InternalReqSpec_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred1_InternalReqSpec() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred1_InternalReqSpec_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred6_InternalReqSpec() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred6_InternalReqSpec_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred5_InternalReqSpec() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred5_InternalReqSpec_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred2_InternalReqSpec() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred2_InternalReqSpec_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }


    protected DFA31 dfa31 = new DFA31(this);
    protected DFA38 dfa38 = new DFA38(this);
    protected DFA52 dfa52 = new DFA52(this);
    protected DFA65 dfa65 = new DFA65(this);
    protected DFA79 dfa79 = new DFA79(this);
    protected DFA97 dfa97 = new DFA97(this);
    protected DFA115 dfa115 = new DFA115(this);
    protected DFA169 dfa169 = new DFA169(this);
    static final String dfa_1s = "\13\uffff";
    static final String dfa_2s = "\1\23\6\uffff\1\25\3\uffff";
    static final String dfa_3s = "\1\120\6\uffff\1\32\3\uffff";
    static final String dfa_4s = "\1\uffff\1\11\1\1\1\2\1\3\1\4\1\5\1\uffff\1\10\1\6\1\7";
    static final String dfa_5s = "\13\uffff}>";
    static final String[] dfa_6s = {
            "\1\1\5\uffff\1\7\1\uffff\1\10\13\uffff\1\5\4\uffff\1\6\17\uffff\1\3\5\uffff\1\2\15\uffff\1\4",
            "",
            "",
            "",
            "",
            "",
            "",
            "\1\12\4\uffff\1\11",
            "",
            "",
            ""
    };

    static final short[] dfa_1 = DFA.unpackEncodedString(dfa_1s);
    static final char[] dfa_2 = DFA.unpackEncodedStringToUnsignedChars(dfa_2s);
    static final char[] dfa_3 = DFA.unpackEncodedStringToUnsignedChars(dfa_3s);
    static final short[] dfa_4 = DFA.unpackEncodedString(dfa_4s);
    static final short[] dfa_5 = DFA.unpackEncodedString(dfa_5s);
    static final short[][] dfa_6 = unpackEncodedStringArray(dfa_6s);

    class DFA31 extends DFA {

        public DFA31(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 31;
            this.eot = dfa_1;
            this.eof = dfa_1;
            this.min = dfa_2;
            this.max = dfa_3;
            this.accept = dfa_4;
            this.special = dfa_5;
            this.transition = dfa_6;
        }
        public String getDescription() {
            return "()* loopback of 1145:3: ( ( (lv_description_12_0= ruleDescription ) ) | ( (lv_constants_13_0= ruleValDeclaration ) ) | ( (lv_computes_14_0= ruleComputeDeclaration ) ) | ( (lv_requirements_15_0= ruleSystemRequirement ) ) | ( (lv_include_16_0= ruleIncludeGlobalRequirement ) ) | (otherlv_17= 'see' otherlv_18= 'document' ( (lv_docReference_19_0= ruleExternalDocument ) )+ ) | (otherlv_20= 'see' otherlv_21= 'goals' ( ( ruleQualifiedName ) )+ ) | (otherlv_23= 'issues' ( (lv_issues_24_0= RULE_STRING ) )+ ) )*";
        }
    }
    static final String dfa_7s = "\12\uffff";
    static final String dfa_8s = "\1\23\5\uffff\1\25\3\uffff";
    static final String dfa_9s = "\1\120\5\uffff\1\32\3\uffff";
    static final String dfa_10s = "\1\uffff\1\10\1\1\1\2\1\3\1\4\1\uffff\1\7\1\6\1\5";
    static final String dfa_11s = "\12\uffff}>";
    static final String[] dfa_12s = {
            "\1\1\5\uffff\1\6\1\uffff\1\7\13\uffff\1\5\24\uffff\1\3\5\uffff\1\2\15\uffff\1\4",
            "",
            "",
            "",
            "",
            "",
            "\1\10\4\uffff\1\11",
            "",
            "",
            ""
    };

    static final short[] dfa_7 = DFA.unpackEncodedString(dfa_7s);
    static final char[] dfa_8 = DFA.unpackEncodedStringToUnsignedChars(dfa_8s);
    static final char[] dfa_9 = DFA.unpackEncodedStringToUnsignedChars(dfa_9s);
    static final short[] dfa_10 = DFA.unpackEncodedString(dfa_10s);
    static final short[] dfa_11 = DFA.unpackEncodedString(dfa_11s);
    static final short[][] dfa_12 = unpackEncodedStringArray(dfa_12s);

    class DFA38 extends DFA {

        public DFA38(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 38;
            this.eot = dfa_7;
            this.eof = dfa_7;
            this.min = dfa_8;
            this.max = dfa_9;
            this.accept = dfa_10;
            this.special = dfa_11;
            this.transition = dfa_12;
        }
        public String getDescription() {
            return "()* loopback of 1439:3: ( ( (lv_description_10_0= ruleDescription ) ) | ( (lv_constants_11_0= ruleValDeclaration ) ) | ( (lv_computes_12_0= ruleComputeDeclaration ) ) | ( (lv_requirements_13_0= ruleGlobalRequirement ) ) | (otherlv_14= 'see' otherlv_15= 'document' ( (lv_docReference_16_0= ruleExternalDocument ) )+ ) | (otherlv_17= 'see' otherlv_18= 'goals' ( ( ruleQualifiedName ) )+ ) | (otherlv_20= 'issues' ( (lv_issues_21_0= RULE_STRING ) )+ ) )*";
        }
    }
    static final String dfa_13s = "\17\uffff";
    static final String dfa_14s = "\1\23\16\uffff";
    static final String dfa_15s = "\1\105\16\uffff";
    static final String dfa_16s = "\1\uffff\1\16\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1\15";
    static final String dfa_17s = "\1\0\16\uffff}>";
    static final String[] dfa_18s = {
            "\1\1\1\14\4\uffff\1\15\1\uffff\1\16\5\uffff\1\2\1\10\1\11\1\uffff\1\12\1\13\7\uffff\1\5\15\uffff\1\4\5\uffff\1\3\1\uffff\1\6\1\7",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static final short[] dfa_13 = DFA.unpackEncodedString(dfa_13s);
    static final char[] dfa_14 = DFA.unpackEncodedStringToUnsignedChars(dfa_14s);
    static final char[] dfa_15 = DFA.unpackEncodedStringToUnsignedChars(dfa_15s);
    static final short[] dfa_16 = DFA.unpackEncodedString(dfa_16s);
    static final short[] dfa_17 = DFA.unpackEncodedString(dfa_17s);
    static final short[][] dfa_18 = unpackEncodedStringArray(dfa_18s);

    class DFA52 extends DFA {

        public DFA52(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 52;
            this.eot = dfa_13;
            this.eof = dfa_13;
            this.min = dfa_14;
            this.max = dfa_15;
            this.accept = dfa_16;
            this.special = dfa_17;
            this.transition = dfa_18;
        }
        public String getDescription() {
            return "()* loopback of 1739:6: ( ({...}? => ( ({...}? => (otherlv_10= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_12_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_13_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_15_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_16_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_17= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'conflicts' otherlv_20= 'with' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_22= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_24_0= 'dropped' ) ) ( (lv_dropRationale_25_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_28= 'see' otherlv_29= 'document' ( (lv_docReference_30_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_31= 'issues' ( (lv_issues_32_0= RULE_STRING ) )+ ) ) ) ) )*";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA52_0 = input.LA(1);

                         
                        int index52_0 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (LA52_0==19) ) {s = 1;}

                        else if ( LA52_0 == 33 && getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 0) ) {s = 2;}

                        else if ( LA52_0 == 66 && getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 1) ) {s = 3;}

                        else if ( LA52_0 == 60 && getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 2) ) {s = 4;}

                        else if ( LA52_0 == 46 && getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 3) ) {s = 5;}

                        else if ( LA52_0 == 68 && getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 4) ) {s = 6;}

                        else if ( LA52_0 == 69 && getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 5) ) {s = 7;}

                        else if ( LA52_0 == 34 && getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 6) ) {s = 8;}

                        else if ( LA52_0 == 35 && getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 7) ) {s = 9;}

                        else if ( LA52_0 == 37 && getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 8) ) {s = 10;}

                        else if ( LA52_0 == 38 && getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 9) ) {s = 11;}

                        else if ( LA52_0 == 20 && getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 10) ) {s = 12;}

                        else if ( LA52_0 == 25 && getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 11) ) {s = 13;}

                        else if ( LA52_0 == 27 && getUnorderedGroupHelper().canSelect(grammarAccess.getDocGoalAccess().getUnorderedGroup_5(), 12) ) {s = 14;}

                         
                        input.seek(index52_0);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 52, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String dfa_19s = "\21\uffff";
    static final String dfa_20s = "\1\23\14\uffff\1\32\3\uffff";
    static final String dfa_21s = "\1\105\14\uffff\1\40\3\uffff";
    static final String dfa_22s = "\1\uffff\1\17\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1\uffff\1\16\1\14\1\15";
    static final String dfa_23s = "\1\0\14\uffff\1\1\3\uffff}>";
    static final String[] dfa_24s = {
            "\1\1\1\14\4\uffff\1\15\1\uffff\1\16\5\uffff\1\2\1\10\1\11\1\uffff\1\12\1\13\7\uffff\1\5\15\uffff\1\4\5\uffff\1\3\1\uffff\1\6\1\7",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\1\20\5\uffff\1\17",
            "",
            "",
            ""
    };

    static final short[] dfa_19 = DFA.unpackEncodedString(dfa_19s);
    static final char[] dfa_20 = DFA.unpackEncodedStringToUnsignedChars(dfa_20s);
    static final char[] dfa_21 = DFA.unpackEncodedStringToUnsignedChars(dfa_21s);
    static final short[] dfa_22 = DFA.unpackEncodedString(dfa_22s);
    static final short[] dfa_23 = DFA.unpackEncodedString(dfa_23s);
    static final short[][] dfa_24 = unpackEncodedStringArray(dfa_24s);

    class DFA65 extends DFA {

        public DFA65(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 65;
            this.eot = dfa_19;
            this.eof = dfa_19;
            this.min = dfa_20;
            this.max = dfa_21;
            this.accept = dfa_22;
            this.special = dfa_23;
            this.transition = dfa_24;
        }
        public String getDescription() {
            return "()* loopback of 2258:6: ( ({...}? => ( ({...}? => (otherlv_8= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_10_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_11_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_12_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_13_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_14_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_15= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_17= 'conflicts' otherlv_18= 'with' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_20= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_22_0= 'dropped' ) ) ( (lv_dropRationale_23_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_24= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_26= 'see' otherlv_27= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'see' otherlv_30= 'document' ( (lv_docReference_31_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'issues' ( (lv_issues_33_0= RULE_STRING ) )+ ) ) ) ) )*";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA65_0 = input.LA(1);

                         
                        int index65_0 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (LA65_0==19) ) {s = 1;}

                        else if ( LA65_0 == 33 && getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 0) ) {s = 2;}

                        else if ( LA65_0 == 66 && getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 1) ) {s = 3;}

                        else if ( LA65_0 == 60 && getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 2) ) {s = 4;}

                        else if ( LA65_0 == 46 && getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 3) ) {s = 5;}

                        else if ( LA65_0 == 68 && getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 4) ) {s = 6;}

                        else if ( LA65_0 == 69 && getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 5) ) {s = 7;}

                        else if ( LA65_0 == 34 && getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 6) ) {s = 8;}

                        else if ( LA65_0 == 35 && getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 7) ) {s = 9;}

                        else if ( LA65_0 == 37 && getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 8) ) {s = 10;}

                        else if ( LA65_0 == 38 && getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 9) ) {s = 11;}

                        else if ( LA65_0 == 20 && getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 10) ) {s = 12;}

                        else if ( LA65_0 == 25 && ( getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 12) || getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 11) ) ) {s = 13;}

                        else if ( LA65_0 == 27 && getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 13) ) {s = 14;}

                         
                        input.seek(index65_0);
                        if ( s>=0 ) return s;
                        break;
                    case 1 : 
                        int LA65_13 = input.LA(1);

                         
                        int index65_13 = input.index();
                        input.rewind();
                        s = -1;
                        if ( LA65_13 == 32 && getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 11) ) {s = 15;}

                        else if ( LA65_13 == 26 && getUnorderedGroupHelper().canSelect(grammarAccess.getGoalAccess().getUnorderedGroup_5(), 12) ) {s = 16;}

                         
                        input.seek(index65_13);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 65, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String dfa_25s = "\26\uffff";
    static final String dfa_26s = "\1\23\20\uffff\1\32\4\uffff";
    static final String dfa_27s = "\1\120\20\uffff\1\47\4\uffff";
    static final String dfa_28s = "\1\uffff\1\24\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1\15\1\16\1\17\1\uffff\1\23\1\22\1\20\1\21";
    static final String dfa_29s = "\26\uffff}>";
    static final String[] dfa_30s = {
            "\1\1\5\uffff\1\21\1\uffff\1\22\5\uffff\1\2\1\15\2\uffff\1\17\1\12\1\uffff\1\10\1\11\1\16\1\20\2\uffff\1\4\7\uffff\1\5\1\uffff\1\5\3\uffff\1\13\5\uffff\1\3\1\uffff\1\6\1\7\12\uffff\1\14",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\1\23\5\uffff\1\24\6\uffff\1\25",
            "",
            "",
            "",
            ""
    };

    static final short[] dfa_25 = DFA.unpackEncodedString(dfa_25s);
    static final char[] dfa_26 = DFA.unpackEncodedStringToUnsignedChars(dfa_26s);
    static final char[] dfa_27 = DFA.unpackEncodedStringToUnsignedChars(dfa_27s);
    static final short[] dfa_28 = DFA.unpackEncodedString(dfa_28s);
    static final short[] dfa_29 = DFA.unpackEncodedString(dfa_29s);
    static final short[][] dfa_30 = unpackEncodedStringArray(dfa_30s);

    class DFA79 extends DFA {

        public DFA79(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 79;
            this.eot = dfa_25;
            this.eof = dfa_25;
            this.min = dfa_26;
            this.max = dfa_27;
            this.accept = dfa_28;
            this.special = dfa_29;
            this.transition = dfa_30;
        }
        public String getDescription() {
            return "()* loopback of 2806:3: ( (otherlv_7= 'category' ( ( ruleQualifiedName ) )+ ) | ( (lv_description_9_0= ruleDescription ) ) | ( (lv_whencondition_10_0= ruleWhenCondition ) ) | ( (lv_predicate_11_0= ruleReqPredicate ) ) | ( (lv_rationale_12_0= ruleRationale ) ) | ( (lv_changeUncertainty_13_0= ruleUncertainty ) ) | (otherlv_14= 'mitigates' ( ( (otherlv_15= RULE_ID ) ) | ( (lv_exceptionText_16_0= RULE_STRING ) ) ) ) | (otherlv_17= 'inherits' ( ( ruleQualifiedName ) ) ) | ( ( (lv_dropped_19_0= 'dropped' ) ) ( (lv_dropRationale_20_0= RULE_STRING ) )? ) | ( (lv_constants_21_0= ruleValDeclaration ) ) | ( (lv_computes_22_0= ruleComputeDeclaration ) ) | (otherlv_23= 'refines' ( ( ruleQualifiedName ) )+ ) | (otherlv_25= 'decomposes' ( ( ruleQualifiedName ) )+ ) | (otherlv_27= 'evolves' ( ( ruleQualifiedName ) )+ ) | (otherlv_29= 'development' otherlv_30= 'stakeholder' ( ( ruleQualifiedName ) )+ ) | (otherlv_32= 'see' otherlv_33= 'goal' ( ( ruleQualifiedName ) )+ ) | (otherlv_35= 'see' otherlv_36= 'requirement' ( ( ruleQualifiedName ) )+ ) | (otherlv_38= 'see' otherlv_39= 'document' ( (lv_docReference_40_0= ruleExternalDocument ) )+ ) | (otherlv_41= 'issues' ( (lv_issues_42_0= RULE_STRING ) )+ ) )*";
        }
    }
    static final String dfa_31s = "\25\uffff";
    static final String dfa_32s = "\1\23\17\uffff\1\32\4\uffff";
    static final String dfa_33s = "\1\120\17\uffff\1\47\4\uffff";
    static final String dfa_34s = "\1\uffff\1\23\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1\15\1\16\1\uffff\1\22\1\17\1\20\1\21";
    static final String dfa_35s = "\1\0\17\uffff\1\1\4\uffff}>";
    static final String[] dfa_36s = {
            "\1\1\5\uffff\1\20\1\uffff\1\21\5\uffff\1\2\1\13\2\uffff\1\15\1\16\1\uffff\1\12\1\uffff\1\14\1\17\2\uffff\1\6\7\uffff\1\7\1\uffff\1\7\3\uffff\1\4\5\uffff\1\3\1\uffff\1\10\1\11\12\uffff\1\5",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\1\24\5\uffff\1\22\6\uffff\1\23",
            "",
            "",
            "",
            ""
    };

    static final short[] dfa_31 = DFA.unpackEncodedString(dfa_31s);
    static final char[] dfa_32 = DFA.unpackEncodedStringToUnsignedChars(dfa_32s);
    static final char[] dfa_33 = DFA.unpackEncodedStringToUnsignedChars(dfa_33s);
    static final short[] dfa_34 = DFA.unpackEncodedString(dfa_34s);
    static final short[] dfa_35 = DFA.unpackEncodedString(dfa_35s);
    static final short[][] dfa_36 = unpackEncodedStringArray(dfa_36s);

    class DFA97 extends DFA {

        public DFA97(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 97;
            this.eot = dfa_31;
            this.eof = dfa_31;
            this.min = dfa_32;
            this.max = dfa_33;
            this.accept = dfa_34;
            this.special = dfa_35;
            this.transition = dfa_36;
        }
        public String getDescription() {
            return "()* loopback of 3400:6: ( ({...}? => ( ({...}? => (otherlv_9= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_11_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_12_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_computes_13_0= ruleComputeDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_14_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_predicate_15_0= ruleReqPredicate ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_16_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_17_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_18= 'mitigates' ( ( (otherlv_19= RULE_ID ) ) | ( (lv_exceptionText_20_0= RULE_STRING ) ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_21= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'decomposes' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_27_0= 'dropped' ) ) ( (lv_dropRationale_28_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'development' otherlv_30= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_32= 'see' otherlv_33= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_35= 'see' otherlv_36= 'requirement' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'see' otherlv_39= 'document' ( (lv_docReference_40_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_41= 'issues' ( (lv_issues_42_0= RULE_STRING ) )+ ) ) ) ) )*";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA97_0 = input.LA(1);

                         
                        int index97_0 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (LA97_0==19) ) {s = 1;}

                        else if ( LA97_0 == 33 && getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 0) ) {s = 2;}

                        else if ( LA97_0 == 66 && getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 1) ) {s = 3;}

                        else if ( LA97_0 == 60 && getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 2) ) {s = 4;}

                        else if ( LA97_0 == 80 && getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 3) ) {s = 5;}

                        else if ( LA97_0 == 46 && getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 4) ) {s = 6;}

                        else if ( ( LA97_0 == 54 || LA97_0 == 56 ) && getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 5) ) {s = 7;}

                        else if ( LA97_0 == 68 && getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 6) ) {s = 8;}

                        else if ( LA97_0 == 69 && getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 7) ) {s = 9;}

                        else if ( LA97_0 == 40 && getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 8) ) {s = 10;}

                        else if ( LA97_0 == 34 && getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 9) ) {s = 11;}

                        else if ( LA97_0 == 42 && getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 10) ) {s = 12;}

                        else if ( LA97_0 == 37 && getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 11) ) {s = 13;}

                        else if ( LA97_0 == 38 && getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 12) ) {s = 14;}

                        else if ( LA97_0 == 43 && getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 13) ) {s = 15;}

                        else if ( LA97_0 == 25 && ( getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 14) || getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 15) || getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 16) ) ) {s = 16;}

                        else if ( LA97_0 == 27 && getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 17) ) {s = 17;}

                         
                        input.seek(index97_0);
                        if ( s>=0 ) return s;
                        break;
                    case 1 : 
                        int LA97_16 = input.LA(1);

                         
                        int index97_16 = input.index();
                        input.rewind();
                        s = -1;
                        if ( LA97_16 == 32 && getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 14) ) {s = 18;}

                        else if ( LA97_16 == 39 && getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 15) ) {s = 19;}

                        else if ( LA97_16 == 26 && getUnorderedGroupHelper().canSelect(grammarAccess.getGlobalRequirementAccess().getUnorderedGroup_5(), 16) ) {s = 20;}

                         
                        input.seek(index97_16);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 97, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String dfa_37s = "\1\23\20\uffff\1\32\3\uffff";
    static final String dfa_38s = "\1\120\20\uffff\1\40\3\uffff";
    static final String dfa_39s = "\1\uffff\1\23\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1\15\1\16\1\17\1\uffff\1\22\1\20\1\21";
    static final String dfa_40s = "\1\1\20\uffff\1\0\3\uffff}>";
    static final String[] dfa_41s = {
            "\1\1\5\uffff\1\21\1\uffff\1\22\5\uffff\1\2\1\13\2\uffff\1\16\1\17\1\uffff\1\12\1\15\1\14\1\20\2\uffff\1\6\7\uffff\1\7\1\uffff\1\7\3\uffff\1\4\5\uffff\1\3\1\uffff\1\10\1\11\12\uffff\1\5",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\1\24\5\uffff\1\23",
            "",
            "",
            ""
    };
    static final char[] dfa_37 = DFA.unpackEncodedStringToUnsignedChars(dfa_37s);
    static final char[] dfa_38 = DFA.unpackEncodedStringToUnsignedChars(dfa_38s);
    static final short[] dfa_39 = DFA.unpackEncodedString(dfa_39s);
    static final short[] dfa_40 = DFA.unpackEncodedString(dfa_40s);
    static final short[][] dfa_41 = unpackEncodedStringArray(dfa_41s);

    class DFA115 extends DFA {

        public DFA115(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 115;
            this.eot = dfa_31;
            this.eof = dfa_31;
            this.min = dfa_37;
            this.max = dfa_38;
            this.accept = dfa_39;
            this.special = dfa_40;
            this.transition = dfa_41;
        }
        public String getDescription() {
            return "()* loopback of 4153:6: ( ({...}? => ( ({...}? => (otherlv_11= 'category' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( (lv_description_13_0= ruleDescription ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_constants_14_0= ruleValDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_computes_15_0= ruleComputeDeclaration ) ) )+ ) ) | ({...}? => ( ({...}? => ( (lv_whencondition_16_0= ruleWhenCondition ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_predicate_17_0= ruleReqPredicate ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_rationale_18_0= ruleRationale ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_changeUncertainty_19_0= ruleUncertainty ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_20= 'mitigates' ( ( (otherlv_21= RULE_ID ) ) | ( (lv_exceptionText_22_0= RULE_STRING ) ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'refines' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'decomposes' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_27= 'inherits' ( ( ruleQualifiedName ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'evolves' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => ( ( (lv_dropped_31_0= 'dropped' ) ) ( (lv_dropRationale_32_0= RULE_STRING ) )? ) ) ) ) | ({...}? => ( ({...}? => (otherlv_33= 'development' otherlv_34= 'stakeholder' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_36= 'see' otherlv_37= 'goal' ( ( ruleQualifiedName ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_39= 'see' otherlv_40= 'document' ( (lv_docReference_41_0= ruleExternalDocument ) )+ ) ) ) ) | ({...}? => ( ({...}? => (otherlv_42= 'issues' ( (lv_issues_43_0= RULE_STRING ) )+ ) ) ) ) )*";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA115_17 = input.LA(1);

                         
                        int index115_17 = input.index();
                        input.rewind();
                        s = -1;
                        if ( LA115_17 == 32 && getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 15) ) {s = 19;}

                        else if ( LA115_17 == 26 && getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 16) ) {s = 20;}

                         
                        input.seek(index115_17);
                        if ( s>=0 ) return s;
                        break;
                    case 1 : 
                        int LA115_0 = input.LA(1);

                         
                        int index115_0 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (LA115_0==19) ) {s = 1;}

                        else if ( LA115_0 == 33 && getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 0) ) {s = 2;}

                        else if ( LA115_0 == 66 && getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 1) ) {s = 3;}

                        else if ( LA115_0 == 60 && getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 2) ) {s = 4;}

                        else if ( LA115_0 == 80 && getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 3) ) {s = 5;}

                        else if ( LA115_0 == 46 && getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 4) ) {s = 6;}

                        else if ( ( LA115_0 == 54 || LA115_0 == 56 ) && getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 5) ) {s = 7;}

                        else if ( LA115_0 == 68 && getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 6) ) {s = 8;}

                        else if ( LA115_0 == 69 && getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 7) ) {s = 9;}

                        else if ( LA115_0 == 40 && getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 8) ) {s = 10;}

                        else if ( LA115_0 == 34 && getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 9) ) {s = 11;}

                        else if ( LA115_0 == 42 && getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 10) ) {s = 12;}

                        else if ( LA115_0 == 41 && getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 11) ) {s = 13;}

                        else if ( LA115_0 == 37 && getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 12) ) {s = 14;}

                        else if ( LA115_0 == 38 && getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 13) ) {s = 15;}

                        else if ( LA115_0 == 43 && getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 14) ) {s = 16;}

                        else if ( LA115_0 == 25 && ( getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 16) || getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 15) ) ) {s = 17;}

                        else if ( LA115_0 == 27 && getUnorderedGroupHelper().canSelect(grammarAccess.getDocRequirementAccess().getUnorderedGroup_5(), 17) ) {s = 18;}

                         
                        input.seek(index115_0);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 115, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String dfa_42s = "\22\uffff";
    static final String dfa_43s = "\10\uffff\1\14\1\uffff\1\17\7\uffff";
    static final String dfa_44s = "\1\35\7\uffff\1\22\1\uffff\1\22\1\155\6\uffff";
    static final String dfa_45s = "\1\166\7\uffff\1\166\1\uffff\1\166\1\162\6\uffff";
    static final String dfa_46s = "\1\uffff\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\uffff\1\12\2\uffff\1\10\1\11\1\13\1\14\1\15\1\16";
    static final String dfa_47s = "\22\uffff}>";
    static final String[] dfa_48s = {
            "\1\11\116\uffff\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\uffff\1\12\1\13",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\1\14\5\uffff\1\14\4\uffff\1\14\116\uffff\10\14\1\15\2\14",
            "",
            "\1\17\5\uffff\1\17\4\uffff\1\17\116\uffff\10\17\1\16\2\17",
            "\1\20\4\uffff\1\21",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static final short[] dfa_42 = DFA.unpackEncodedString(dfa_42s);
    static final short[] dfa_43 = DFA.unpackEncodedString(dfa_43s);
    static final char[] dfa_44 = DFA.unpackEncodedStringToUnsignedChars(dfa_44s);
    static final char[] dfa_45 = DFA.unpackEncodedStringToUnsignedChars(dfa_45s);
    static final short[] dfa_46 = DFA.unpackEncodedString(dfa_46s);
    static final short[] dfa_47 = DFA.unpackEncodedString(dfa_47s);
    static final short[][] dfa_48 = unpackEncodedStringArray(dfa_48s);

    class DFA169 extends DFA {

        public DFA169(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 169;
            this.eot = dfa_42;
            this.eof = dfa_43;
            this.min = dfa_44;
            this.max = dfa_45;
            this.accept = dfa_46;
            this.special = dfa_47;
            this.transition = dfa_48;
        }
        public String getDescription() {
            return "8314:2: (kw= 'abstract' | kw= 'bus' | kw= 'data' | kw= 'device' | kw= 'memory' | kw= 'process' | kw= 'processor' | kw= 'subprogram' | (kw= 'subprogram' kw= 'group' ) | kw= 'system' | (kw= 'thread' kw= 'group' ) | kw= 'thread' | (kw= 'virtual' kw= 'bus' ) | (kw= 'virtual' kw= 'processor' ) )";
        }
    }
 

    
    private static class FollowSets000 {
        public static final BitSet FOLLOW_1 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_2 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_3 = new BitSet(new long[]{0x00000000A4120002L});
        public static final BitSet FOLLOW_4 = new BitSet(new long[]{0x0000000000000020L});
        public static final BitSet FOLLOW_5 = new BitSet(new long[]{0x0000000000040000L});
        public static final BitSet FOLLOW_6 = new BitSet(new long[]{0x1000000000080000L});
        public static final BitSet FOLLOW_7 = new BitSet(new long[]{0x0000000000200000L});
        public static final BitSet FOLLOW_8 = new BitSet(new long[]{0x0000000000C00000L});
        public static final BitSet FOLLOW_9 = new BitSet(new long[]{0x0000000000000010L});
        public static final BitSet FOLLOW_10 = new BitSet(new long[]{0x0000000000800000L});
        public static final BitSet FOLLOW_11 = new BitSet(new long[]{0x0000000020000020L,0x006FF00000000000L});
        public static final BitSet FOLLOW_12 = new BitSet(new long[]{0x0000000001040000L});
        public static final BitSet FOLLOW_13 = new BitSet(new long[]{0x0000000021040020L,0x006FF00000000000L});
        public static final BitSet FOLLOW_14 = new BitSet(new long[]{0x0000000000020000L});
        public static final BitSet FOLLOW_15 = new BitSet(new long[]{0x0000000000040020L});
        public static final BitSet FOLLOW_16 = new BitSet(new long[]{0x100000010A080000L,0x0000000000000004L});
        public static final BitSet FOLLOW_17 = new BitSet(new long[]{0x0000000004000000L});
        public static final BitSet FOLLOW_18 = new BitSet(new long[]{0x100000010A080020L,0x0000000000000004L});
        public static final BitSet FOLLOW_19 = new BitSet(new long[]{0x100000010A080010L,0x0000000000000004L});
        public static final BitSet FOLLOW_20 = new BitSet(new long[]{0x0000000000440000L});
        public static final BitSet FOLLOW_21 = new BitSet(new long[]{0x000000811A080000L,0x0000000000000004L});
        public static final BitSet FOLLOW_22 = new BitSet(new long[]{0x000000811A080020L,0x0000000000000004L});
        public static final BitSet FOLLOW_23 = new BitSet(new long[]{0x000000811A080010L,0x0000000000000004L});
        public static final BitSet FOLLOW_24 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_25 = new BitSet(new long[]{0x0000008110080000L,0x0000000000000004L});
        public static final BitSet FOLLOW_26 = new BitSet(new long[]{0x0000000040000000L});
        public static final BitSet FOLLOW_27 = new BitSet(new long[]{0x100010800A080000L,0x0000000000010004L});
        public static final BitSet FOLLOW_28 = new BitSet(new long[]{0x100010800A080020L,0x0000000000010004L});
        public static final BitSet FOLLOW_29 = new BitSet(new long[]{0x100010800A080010L,0x0000000000010004L});
        public static final BitSet FOLLOW_30 = new BitSet(new long[]{0x0000000001440000L});
        public static final BitSet FOLLOW_31 = new BitSet(new long[]{0x100000800A080000L,0x0000000000010004L});
        public static final BitSet FOLLOW_32 = new BitSet(new long[]{0x100000800A080020L,0x0000000000010004L});
        public static final BitSet FOLLOW_33 = new BitSet(new long[]{0x100000800A080010L,0x0000000000010004L});
        public static final BitSet FOLLOW_34 = new BitSet(new long[]{0x0000000000C40000L});
        public static final BitSet FOLLOW_35 = new BitSet(new long[]{0x0000000000840000L});
        public static final BitSet FOLLOW_36 = new BitSet(new long[]{0x1000406E0A180000L,0x0000000000000034L});
        public static final BitSet FOLLOW_37 = new BitSet(new long[]{0x1000406E0A180020L,0x0000000000000034L});
        public static final BitSet FOLLOW_38 = new BitSet(new long[]{0x0000001000000000L});
        public static final BitSet FOLLOW_39 = new BitSet(new long[]{0x1000406E0A180010L,0x0000000000000034L});
        public static final BitSet FOLLOW_40 = new BitSet(new long[]{0x0000000100000000L});
        public static final BitSet FOLLOW_41 = new BitSet(new long[]{0x11404F660A080000L,0x0000000000010034L});
        public static final BitSet FOLLOW_42 = new BitSet(new long[]{0x11404F660A080020L,0x0000000000010034L});
        public static final BitSet FOLLOW_43 = new BitSet(new long[]{0x11404F660A080010L,0x0000000000010034L});
        public static final BitSet FOLLOW_44 = new BitSet(new long[]{0x0000000000100000L});
        public static final BitSet FOLLOW_45 = new BitSet(new long[]{0x0000008000000000L});
        public static final BitSet FOLLOW_46 = new BitSet(new long[]{0x0001000020000020L,0x1F6FF00000008000L});
        public static final BitSet FOLLOW_47 = new BitSet(new long[]{0x0000000020040020L,0x006FF00000000000L});
        public static final BitSet FOLLOW_48 = new BitSet(new long[]{0x11404D660A080000L,0x0000000000010034L});
        public static final BitSet FOLLOW_49 = new BitSet(new long[]{0x11404D660A080020L,0x0000000000010034L});
        public static final BitSet FOLLOW_50 = new BitSet(new long[]{0x11404D660A080010L,0x0000000000010034L});
        public static final BitSet FOLLOW_51 = new BitSet(new long[]{0x0000000020000030L,0x006FF00000000000L});
        public static final BitSet FOLLOW_52 = new BitSet(new long[]{0x0000000000800002L});
        public static final BitSet FOLLOW_53 = new BitSet(new long[]{0x0000200000000020L});
        public static final BitSet FOLLOW_54 = new BitSet(new long[]{0x0000800000000020L});
        public static final BitSet FOLLOW_55 = new BitSet(new long[]{0x0001000000000000L});
        public static final BitSet FOLLOW_56 = new BitSet(new long[]{0x0002000000000002L});
        public static final BitSet FOLLOW_57 = new BitSet(new long[]{0x0004000000000000L});
        public static final BitSet FOLLOW_58 = new BitSet(new long[]{0x0008000000000000L});
        public static final BitSet FOLLOW_59 = new BitSet(new long[]{0x0010000000000000L});
        public static final BitSet FOLLOW_60 = new BitSet(new long[]{0x0020000000000000L});
        public static final BitSet FOLLOW_61 = new BitSet(new long[]{0x0080000000000000L});
        public static final BitSet FOLLOW_62 = new BitSet(new long[]{0x08100000000400F0L,0x00000C48C0000008L});
        public static final BitSet FOLLOW_63 = new BitSet(new long[]{0x0000001000000002L});
        public static final BitSet FOLLOW_64 = new BitSet(new long[]{0x0000000000000022L});
        public static final BitSet FOLLOW_65 = new BitSet(new long[]{0x0600000000000000L});
        public static final BitSet FOLLOW_66 = new BitSet(new long[]{0x0800000000000002L});
        public static final BitSet FOLLOW_67 = new BitSet(new long[]{0x4000000000400000L});
        public static final BitSet FOLLOW_68 = new BitSet(new long[]{0x2000000000040020L,0x0000000000007600L});
        public static final BitSet FOLLOW_69 = new BitSet(new long[]{0x4000000000000000L});
        public static final BitSet FOLLOW_70 = new BitSet(new long[]{0x0000000000000020L,0x0000000000007600L});
        public static final BitSet FOLLOW_71 = new BitSet(new long[]{0x2000000000000020L,0x0000000000007600L});
        public static final BitSet FOLLOW_72 = new BitSet(new long[]{0x0000000000080000L});
        public static final BitSet FOLLOW_73 = new BitSet(new long[]{0x8000000000000002L});
        public static final BitSet FOLLOW_74 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000001L});
        public static final BitSet FOLLOW_75 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000002L});
        public static final BitSet FOLLOW_76 = new BitSet(new long[]{0x0000000000000030L,0x0000000000040008L});
        public static final BitSet FOLLOW_77 = new BitSet(new long[]{0x0000000000000032L,0x0000000000040008L});
        public static final BitSet FOLLOW_78 = new BitSet(new long[]{0x0000000000080000L,0x00000000000001C0L});
        public static final BitSet FOLLOW_79 = new BitSet(new long[]{0x0000000000000040L});
        public static final BitSet FOLLOW_80 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000800L});
        public static final BitSet FOLLOW_81 = new BitSet(new long[]{0x0000000000000000L,0x0000000000008000L});
        public static final BitSet FOLLOW_82 = new BitSet(new long[]{0x0000000000400000L});
        public static final BitSet FOLLOW_83 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000002L});
        public static final BitSet FOLLOW_84 = new BitSet(new long[]{0x0000800000000002L,0x0000000000020000L});
        public static final BitSet FOLLOW_85 = new BitSet(new long[]{0x0000000000000002L,0x0000000000180000L});
        public static final BitSet FOLLOW_86 = new BitSet(new long[]{0x0000000000000002L,0x0000000000600000L});
        public static final BitSet FOLLOW_87 = new BitSet(new long[]{0x0000000000000002L,0x0000000001800000L});
        public static final BitSet FOLLOW_88 = new BitSet(new long[]{0x0000000000000002L,0x000000003E000000L});
        public static final BitSet FOLLOW_89 = new BitSet(new long[]{0x0000000000000002L,0x00000000C0000000L});
        public static final BitSet FOLLOW_90 = new BitSet(new long[]{0x0000000000000002L,0x0000000700000001L});
        public static final BitSet FOLLOW_91 = new BitSet(new long[]{0x0000800000000022L,0x0000000000020000L});
        public static final BitSet FOLLOW_92 = new BitSet(new long[]{0x08300000000400F0L,0x00000C48C0000008L});
        public static final BitSet FOLLOW_93 = new BitSet(new long[]{0x0022000000000000L});
        public static final BitSet FOLLOW_94 = new BitSet(new long[]{0x0000000000000000L,0x0000001000000000L});
        public static final BitSet FOLLOW_95 = new BitSet(new long[]{0x0000000000080000L,0x0000002000000000L});
        public static final BitSet FOLLOW_96 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
        public static final BitSet FOLLOW_97 = new BitSet(new long[]{0x0000000000000000L,0x0000030000000000L});
        public static final BitSet FOLLOW_98 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
        public static final BitSet FOLLOW_99 = new BitSet(new long[]{0x0000000000000000L,0x0010000000000000L});
        public static final BitSet FOLLOW_100 = new BitSet(new long[]{0x0000000000000000L,0x0000200000000000L});
        public static final BitSet FOLLOW_101 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
        public static final BitSet FOLLOW_102 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
        public static final BitSet FOLLOW_103 = new BitSet(new long[]{0x0000000000000002L,0x0080000000000002L});
        public static final BitSet FOLLOW_104 = new BitSet(new long[]{0x0000000000000002L,0x0080000000000000L});
    }


}