package com.irtsaintexupery.xtext.pseim.ide.contentassist.antlr.internal;

import java.io.InputStream;
import org.eclipse.xtext.*;
import org.eclipse.xtext.parser.*;
import org.eclipse.xtext.parser.impl.*;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.parser.antlr.XtextTokenStream;
import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
import org.eclipse.xtext.ide.editor.contentassist.antlr.internal.AbstractInternalContentAssistParser;
import org.eclipse.xtext.ide.editor.contentassist.antlr.internal.DFA;
import com.irtsaintexupery.xtext.pseim.services.PatternGrammarAccess;



import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;

@SuppressWarnings("all")
public class InternalPatternParser extends AbstractInternalContentAssistParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_INT", "RULE_STRING", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'unspec'", "'in'", "'out'", "'inout'", "'Transpose'", "'Identity'", "'First'", "'Rotate'", "'ShiftC'", "'ShiftP'", "'FlattenC'", "'ForkC'", "'ForkP'", "'JoinC'", "'JoinP'", "'Last'", "'pattern'", "'('", "')'", "','", "'{'", "'}'", "'component'", "'['", "']'", "'--{'", "'}->'", "'.'"
    };
    public static final int RULE_STRING=6;
    public static final int RULE_SL_COMMENT=8;
    public static final int T__19=19;
    public static final int T__15=15;
    public static final int T__37=37;
    public static final int T__16=16;
    public static final int T__38=38;
    public static final int T__17=17;
    public static final int T__18=18;
    public static final int T__11=11;
    public static final int T__33=33;
    public static final int T__12=12;
    public static final int T__34=34;
    public static final int T__13=13;
    public static final int T__35=35;
    public static final int T__14=14;
    public static final int T__36=36;
    public static final int EOF=-1;
    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_ID=4;
    public static final int RULE_WS=9;
    public static final int RULE_ANY_OTHER=10;
    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 RULE_INT=5;
    public static final int T__29=29;
    public static final int T__22=22;
    public static final int RULE_ML_COMMENT=7;
    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;

    // delegates
    // delegators


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

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


    	private PatternGrammarAccess grammarAccess;

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

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

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



    // $ANTLR start "entryRulePattern"
    // InternalPattern.g:53:1: entryRulePattern : rulePattern EOF ;
    public final void entryRulePattern() throws RecognitionException {
        try {
            // InternalPattern.g:54:1: ( rulePattern EOF )
            // InternalPattern.g:55:1: rulePattern EOF
            {
             before(grammarAccess.getPatternRule()); 
            pushFollow(FOLLOW_1);
            rulePattern();

            state._fsp--;

             after(grammarAccess.getPatternRule()); 
            match(input,EOF,FOLLOW_2); 

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "entryRulePattern"


    // $ANTLR start "rulePattern"
    // InternalPattern.g:62:1: rulePattern : ( ( rule__Pattern__Group__0 ) ) ;
    public final void rulePattern() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:66:2: ( ( ( rule__Pattern__Group__0 ) ) )
            // InternalPattern.g:67:2: ( ( rule__Pattern__Group__0 ) )
            {
            // InternalPattern.g:67:2: ( ( rule__Pattern__Group__0 ) )
            // InternalPattern.g:68:3: ( rule__Pattern__Group__0 )
            {
             before(grammarAccess.getPatternAccess().getGroup()); 
            // InternalPattern.g:69:3: ( rule__Pattern__Group__0 )
            // InternalPattern.g:69:4: rule__Pattern__Group__0
            {
            pushFollow(FOLLOW_2);
            rule__Pattern__Group__0();

            state._fsp--;


            }

             after(grammarAccess.getPatternAccess().getGroup()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rulePattern"


    // $ANTLR start "entryRulePatternComponent"
    // InternalPattern.g:78:1: entryRulePatternComponent : rulePatternComponent EOF ;
    public final void entryRulePatternComponent() throws RecognitionException {
        try {
            // InternalPattern.g:79:1: ( rulePatternComponent EOF )
            // InternalPattern.g:80:1: rulePatternComponent EOF
            {
             before(grammarAccess.getPatternComponentRule()); 
            pushFollow(FOLLOW_1);
            rulePatternComponent();

            state._fsp--;

             after(grammarAccess.getPatternComponentRule()); 
            match(input,EOF,FOLLOW_2); 

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "entryRulePatternComponent"


    // $ANTLR start "rulePatternComponent"
    // InternalPattern.g:87:1: rulePatternComponent : ( ( rule__PatternComponent__Group__0 ) ) ;
    public final void rulePatternComponent() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:91:2: ( ( ( rule__PatternComponent__Group__0 ) ) )
            // InternalPattern.g:92:2: ( ( rule__PatternComponent__Group__0 ) )
            {
            // InternalPattern.g:92:2: ( ( rule__PatternComponent__Group__0 ) )
            // InternalPattern.g:93:3: ( rule__PatternComponent__Group__0 )
            {
             before(grammarAccess.getPatternComponentAccess().getGroup()); 
            // InternalPattern.g:94:3: ( rule__PatternComponent__Group__0 )
            // InternalPattern.g:94:4: rule__PatternComponent__Group__0
            {
            pushFollow(FOLLOW_2);
            rule__PatternComponent__Group__0();

            state._fsp--;


            }

             after(grammarAccess.getPatternComponentAccess().getGroup()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rulePatternComponent"


    // $ANTLR start "entryRulePatternPort"
    // InternalPattern.g:103:1: entryRulePatternPort : rulePatternPort EOF ;
    public final void entryRulePatternPort() throws RecognitionException {
        try {
            // InternalPattern.g:104:1: ( rulePatternPort EOF )
            // InternalPattern.g:105:1: rulePatternPort EOF
            {
             before(grammarAccess.getPatternPortRule()); 
            pushFollow(FOLLOW_1);
            rulePatternPort();

            state._fsp--;

             after(grammarAccess.getPatternPortRule()); 
            match(input,EOF,FOLLOW_2); 

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "entryRulePatternPort"


    // $ANTLR start "rulePatternPort"
    // InternalPattern.g:112:1: rulePatternPort : ( ( rule__PatternPort__Group__0 ) ) ;
    public final void rulePatternPort() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:116:2: ( ( ( rule__PatternPort__Group__0 ) ) )
            // InternalPattern.g:117:2: ( ( rule__PatternPort__Group__0 ) )
            {
            // InternalPattern.g:117:2: ( ( rule__PatternPort__Group__0 ) )
            // InternalPattern.g:118:3: ( rule__PatternPort__Group__0 )
            {
             before(grammarAccess.getPatternPortAccess().getGroup()); 
            // InternalPattern.g:119:3: ( rule__PatternPort__Group__0 )
            // InternalPattern.g:119:4: rule__PatternPort__Group__0
            {
            pushFollow(FOLLOW_2);
            rule__PatternPort__Group__0();

            state._fsp--;


            }

             after(grammarAccess.getPatternPortAccess().getGroup()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rulePatternPort"


    // $ANTLR start "entryRuleCardinalityElement"
    // InternalPattern.g:128:1: entryRuleCardinalityElement : ruleCardinalityElement EOF ;
    public final void entryRuleCardinalityElement() throws RecognitionException {
        try {
            // InternalPattern.g:129:1: ( ruleCardinalityElement EOF )
            // InternalPattern.g:130:1: ruleCardinalityElement EOF
            {
             before(grammarAccess.getCardinalityElementRule()); 
            pushFollow(FOLLOW_1);
            ruleCardinalityElement();

            state._fsp--;

             after(grammarAccess.getCardinalityElementRule()); 
            match(input,EOF,FOLLOW_2); 

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "entryRuleCardinalityElement"


    // $ANTLR start "ruleCardinalityElement"
    // InternalPattern.g:137:1: ruleCardinalityElement : ( ( rule__CardinalityElement__NameAssignment ) ) ;
    public final void ruleCardinalityElement() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:141:2: ( ( ( rule__CardinalityElement__NameAssignment ) ) )
            // InternalPattern.g:142:2: ( ( rule__CardinalityElement__NameAssignment ) )
            {
            // InternalPattern.g:142:2: ( ( rule__CardinalityElement__NameAssignment ) )
            // InternalPattern.g:143:3: ( rule__CardinalityElement__NameAssignment )
            {
             before(grammarAccess.getCardinalityElementAccess().getNameAssignment()); 
            // InternalPattern.g:144:3: ( rule__CardinalityElement__NameAssignment )
            // InternalPattern.g:144:4: rule__CardinalityElement__NameAssignment
            {
            pushFollow(FOLLOW_2);
            rule__CardinalityElement__NameAssignment();

            state._fsp--;


            }

             after(grammarAccess.getCardinalityElementAccess().getNameAssignment()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "ruleCardinalityElement"


    // $ANTLR start "entryRulePatternLink"
    // InternalPattern.g:153:1: entryRulePatternLink : rulePatternLink EOF ;
    public final void entryRulePatternLink() throws RecognitionException {
        try {
            // InternalPattern.g:154:1: ( rulePatternLink EOF )
            // InternalPattern.g:155:1: rulePatternLink EOF
            {
             before(grammarAccess.getPatternLinkRule()); 
            pushFollow(FOLLOW_1);
            rulePatternLink();

            state._fsp--;

             after(grammarAccess.getPatternLinkRule()); 
            match(input,EOF,FOLLOW_2); 

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "entryRulePatternLink"


    // $ANTLR start "rulePatternLink"
    // InternalPattern.g:162:1: rulePatternLink : ( ( rule__PatternLink__Group__0 ) ) ;
    public final void rulePatternLink() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:166:2: ( ( ( rule__PatternLink__Group__0 ) ) )
            // InternalPattern.g:167:2: ( ( rule__PatternLink__Group__0 ) )
            {
            // InternalPattern.g:167:2: ( ( rule__PatternLink__Group__0 ) )
            // InternalPattern.g:168:3: ( rule__PatternLink__Group__0 )
            {
             before(grammarAccess.getPatternLinkAccess().getGroup()); 
            // InternalPattern.g:169:3: ( rule__PatternLink__Group__0 )
            // InternalPattern.g:169:4: rule__PatternLink__Group__0
            {
            pushFollow(FOLLOW_2);
            rule__PatternLink__Group__0();

            state._fsp--;


            }

             after(grammarAccess.getPatternLinkAccess().getGroup()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rulePatternLink"


    // $ANTLR start "entryRuleQualifiedID"
    // InternalPattern.g:178:1: entryRuleQualifiedID : ruleQualifiedID EOF ;
    public final void entryRuleQualifiedID() throws RecognitionException {
        try {
            // InternalPattern.g:179:1: ( ruleQualifiedID EOF )
            // InternalPattern.g:180:1: ruleQualifiedID EOF
            {
             before(grammarAccess.getQualifiedIDRule()); 
            pushFollow(FOLLOW_1);
            ruleQualifiedID();

            state._fsp--;

             after(grammarAccess.getQualifiedIDRule()); 
            match(input,EOF,FOLLOW_2); 

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "entryRuleQualifiedID"


    // $ANTLR start "ruleQualifiedID"
    // InternalPattern.g:187:1: ruleQualifiedID : ( ( rule__QualifiedID__Group__0 ) ) ;
    public final void ruleQualifiedID() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:191:2: ( ( ( rule__QualifiedID__Group__0 ) ) )
            // InternalPattern.g:192:2: ( ( rule__QualifiedID__Group__0 ) )
            {
            // InternalPattern.g:192:2: ( ( rule__QualifiedID__Group__0 ) )
            // InternalPattern.g:193:3: ( rule__QualifiedID__Group__0 )
            {
             before(grammarAccess.getQualifiedIDAccess().getGroup()); 
            // InternalPattern.g:194:3: ( rule__QualifiedID__Group__0 )
            // InternalPattern.g:194:4: rule__QualifiedID__Group__0
            {
            pushFollow(FOLLOW_2);
            rule__QualifiedID__Group__0();

            state._fsp--;


            }

             after(grammarAccess.getQualifiedIDAccess().getGroup()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "ruleQualifiedID"


    // $ANTLR start "rulePatternPortDirection"
    // InternalPattern.g:203:1: rulePatternPortDirection : ( ( rule__PatternPortDirection__Alternatives ) ) ;
    public final void rulePatternPortDirection() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:207:1: ( ( ( rule__PatternPortDirection__Alternatives ) ) )
            // InternalPattern.g:208:2: ( ( rule__PatternPortDirection__Alternatives ) )
            {
            // InternalPattern.g:208:2: ( ( rule__PatternPortDirection__Alternatives ) )
            // InternalPattern.g:209:3: ( rule__PatternPortDirection__Alternatives )
            {
             before(grammarAccess.getPatternPortDirectionAccess().getAlternatives()); 
            // InternalPattern.g:210:3: ( rule__PatternPortDirection__Alternatives )
            // InternalPattern.g:210:4: rule__PatternPortDirection__Alternatives
            {
            pushFollow(FOLLOW_2);
            rule__PatternPortDirection__Alternatives();

            state._fsp--;


            }

             after(grammarAccess.getPatternPortDirectionAccess().getAlternatives()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rulePatternPortDirection"


    // $ANTLR start "ruleLinkType"
    // InternalPattern.g:219:1: ruleLinkType : ( ( rule__LinkType__Alternatives ) ) ;
    public final void ruleLinkType() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:223:1: ( ( ( rule__LinkType__Alternatives ) ) )
            // InternalPattern.g:224:2: ( ( rule__LinkType__Alternatives ) )
            {
            // InternalPattern.g:224:2: ( ( rule__LinkType__Alternatives ) )
            // InternalPattern.g:225:3: ( rule__LinkType__Alternatives )
            {
             before(grammarAccess.getLinkTypeAccess().getAlternatives()); 
            // InternalPattern.g:226:3: ( rule__LinkType__Alternatives )
            // InternalPattern.g:226:4: rule__LinkType__Alternatives
            {
            pushFollow(FOLLOW_2);
            rule__LinkType__Alternatives();

            state._fsp--;


            }

             after(grammarAccess.getLinkTypeAccess().getAlternatives()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "ruleLinkType"


    // $ANTLR start "rule__Pattern__Alternatives_5_1"
    // InternalPattern.g:234:1: rule__Pattern__Alternatives_5_1 : ( ( ( rule__Pattern__ModelElementsAssignment_5_1_0 ) ) | ( ( rule__Pattern__ModelElementsAssignment_5_1_1 ) ) );
    public final void rule__Pattern__Alternatives_5_1() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:238:1: ( ( ( rule__Pattern__ModelElementsAssignment_5_1_0 ) ) | ( ( rule__Pattern__ModelElementsAssignment_5_1_1 ) ) )
            int alt1=2;
            int LA1_0 = input.LA(1);

            if ( (LA1_0==33) ) {
                alt1=1;
            }
            else if ( (LA1_0==RULE_ID) ) {
                alt1=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 1, 0, input);

                throw nvae;
            }
            switch (alt1) {
                case 1 :
                    // InternalPattern.g:239:2: ( ( rule__Pattern__ModelElementsAssignment_5_1_0 ) )
                    {
                    // InternalPattern.g:239:2: ( ( rule__Pattern__ModelElementsAssignment_5_1_0 ) )
                    // InternalPattern.g:240:3: ( rule__Pattern__ModelElementsAssignment_5_1_0 )
                    {
                     before(grammarAccess.getPatternAccess().getModelElementsAssignment_5_1_0()); 
                    // InternalPattern.g:241:3: ( rule__Pattern__ModelElementsAssignment_5_1_0 )
                    // InternalPattern.g:241:4: rule__Pattern__ModelElementsAssignment_5_1_0
                    {
                    pushFollow(FOLLOW_2);
                    rule__Pattern__ModelElementsAssignment_5_1_0();

                    state._fsp--;


                    }

                     after(grammarAccess.getPatternAccess().getModelElementsAssignment_5_1_0()); 

                    }


                    }
                    break;
                case 2 :
                    // InternalPattern.g:245:2: ( ( rule__Pattern__ModelElementsAssignment_5_1_1 ) )
                    {
                    // InternalPattern.g:245:2: ( ( rule__Pattern__ModelElementsAssignment_5_1_1 ) )
                    // InternalPattern.g:246:3: ( rule__Pattern__ModelElementsAssignment_5_1_1 )
                    {
                     before(grammarAccess.getPatternAccess().getModelElementsAssignment_5_1_1()); 
                    // InternalPattern.g:247:3: ( rule__Pattern__ModelElementsAssignment_5_1_1 )
                    // InternalPattern.g:247:4: rule__Pattern__ModelElementsAssignment_5_1_1
                    {
                    pushFollow(FOLLOW_2);
                    rule__Pattern__ModelElementsAssignment_5_1_1();

                    state._fsp--;


                    }

                     after(grammarAccess.getPatternAccess().getModelElementsAssignment_5_1_1()); 

                    }


                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Pattern__Alternatives_5_1"


    // $ANTLR start "rule__PatternComponent__Alternatives_2_1"
    // InternalPattern.g:255:1: rule__PatternComponent__Alternatives_2_1 : ( ( ( rule__PatternComponent__MultiplicityValueAssignment_2_1_0 ) ) | ( ( rule__PatternComponent__CardinalityElementAssignment_2_1_1 ) ) );
    public final void rule__PatternComponent__Alternatives_2_1() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:259:1: ( ( ( rule__PatternComponent__MultiplicityValueAssignment_2_1_0 ) ) | ( ( rule__PatternComponent__CardinalityElementAssignment_2_1_1 ) ) )
            int alt2=2;
            int LA2_0 = input.LA(1);

            if ( (LA2_0==RULE_INT) ) {
                alt2=1;
            }
            else if ( (LA2_0==RULE_ID) ) {
                alt2=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 2, 0, input);

                throw nvae;
            }
            switch (alt2) {
                case 1 :
                    // InternalPattern.g:260:2: ( ( rule__PatternComponent__MultiplicityValueAssignment_2_1_0 ) )
                    {
                    // InternalPattern.g:260:2: ( ( rule__PatternComponent__MultiplicityValueAssignment_2_1_0 ) )
                    // InternalPattern.g:261:3: ( rule__PatternComponent__MultiplicityValueAssignment_2_1_0 )
                    {
                     before(grammarAccess.getPatternComponentAccess().getMultiplicityValueAssignment_2_1_0()); 
                    // InternalPattern.g:262:3: ( rule__PatternComponent__MultiplicityValueAssignment_2_1_0 )
                    // InternalPattern.g:262:4: rule__PatternComponent__MultiplicityValueAssignment_2_1_0
                    {
                    pushFollow(FOLLOW_2);
                    rule__PatternComponent__MultiplicityValueAssignment_2_1_0();

                    state._fsp--;


                    }

                     after(grammarAccess.getPatternComponentAccess().getMultiplicityValueAssignment_2_1_0()); 

                    }


                    }
                    break;
                case 2 :
                    // InternalPattern.g:266:2: ( ( rule__PatternComponent__CardinalityElementAssignment_2_1_1 ) )
                    {
                    // InternalPattern.g:266:2: ( ( rule__PatternComponent__CardinalityElementAssignment_2_1_1 ) )
                    // InternalPattern.g:267:3: ( rule__PatternComponent__CardinalityElementAssignment_2_1_1 )
                    {
                     before(grammarAccess.getPatternComponentAccess().getCardinalityElementAssignment_2_1_1()); 
                    // InternalPattern.g:268:3: ( rule__PatternComponent__CardinalityElementAssignment_2_1_1 )
                    // InternalPattern.g:268:4: rule__PatternComponent__CardinalityElementAssignment_2_1_1
                    {
                    pushFollow(FOLLOW_2);
                    rule__PatternComponent__CardinalityElementAssignment_2_1_1();

                    state._fsp--;


                    }

                     after(grammarAccess.getPatternComponentAccess().getCardinalityElementAssignment_2_1_1()); 

                    }


                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__Alternatives_2_1"


    // $ANTLR start "rule__PatternComponent__Alternatives_6_1"
    // InternalPattern.g:276:1: rule__PatternComponent__Alternatives_6_1 : ( ( ( rule__PatternComponent__ContentAssignment_6_1_0 ) ) | ( ( rule__PatternComponent__ContentAssignment_6_1_1 ) ) );
    public final void rule__PatternComponent__Alternatives_6_1() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:280:1: ( ( ( rule__PatternComponent__ContentAssignment_6_1_0 ) ) | ( ( rule__PatternComponent__ContentAssignment_6_1_1 ) ) )
            int alt3=2;
            int LA3_0 = input.LA(1);

            if ( (LA3_0==33) ) {
                alt3=1;
            }
            else if ( (LA3_0==RULE_ID) ) {
                alt3=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 3, 0, input);

                throw nvae;
            }
            switch (alt3) {
                case 1 :
                    // InternalPattern.g:281:2: ( ( rule__PatternComponent__ContentAssignment_6_1_0 ) )
                    {
                    // InternalPattern.g:281:2: ( ( rule__PatternComponent__ContentAssignment_6_1_0 ) )
                    // InternalPattern.g:282:3: ( rule__PatternComponent__ContentAssignment_6_1_0 )
                    {
                     before(grammarAccess.getPatternComponentAccess().getContentAssignment_6_1_0()); 
                    // InternalPattern.g:283:3: ( rule__PatternComponent__ContentAssignment_6_1_0 )
                    // InternalPattern.g:283:4: rule__PatternComponent__ContentAssignment_6_1_0
                    {
                    pushFollow(FOLLOW_2);
                    rule__PatternComponent__ContentAssignment_6_1_0();

                    state._fsp--;


                    }

                     after(grammarAccess.getPatternComponentAccess().getContentAssignment_6_1_0()); 

                    }


                    }
                    break;
                case 2 :
                    // InternalPattern.g:287:2: ( ( rule__PatternComponent__ContentAssignment_6_1_1 ) )
                    {
                    // InternalPattern.g:287:2: ( ( rule__PatternComponent__ContentAssignment_6_1_1 ) )
                    // InternalPattern.g:288:3: ( rule__PatternComponent__ContentAssignment_6_1_1 )
                    {
                     before(grammarAccess.getPatternComponentAccess().getContentAssignment_6_1_1()); 
                    // InternalPattern.g:289:3: ( rule__PatternComponent__ContentAssignment_6_1_1 )
                    // InternalPattern.g:289:4: rule__PatternComponent__ContentAssignment_6_1_1
                    {
                    pushFollow(FOLLOW_2);
                    rule__PatternComponent__ContentAssignment_6_1_1();

                    state._fsp--;


                    }

                     after(grammarAccess.getPatternComponentAccess().getContentAssignment_6_1_1()); 

                    }


                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__Alternatives_6_1"


    // $ANTLR start "rule__PatternPort__Alternatives_2_1"
    // InternalPattern.g:297:1: rule__PatternPort__Alternatives_2_1 : ( ( ( rule__PatternPort__MultiplicityValueAssignment_2_1_0 ) ) | ( ( rule__PatternPort__CardinalityElementAssignment_2_1_1 ) ) );
    public final void rule__PatternPort__Alternatives_2_1() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:301:1: ( ( ( rule__PatternPort__MultiplicityValueAssignment_2_1_0 ) ) | ( ( rule__PatternPort__CardinalityElementAssignment_2_1_1 ) ) )
            int alt4=2;
            int LA4_0 = input.LA(1);

            if ( (LA4_0==RULE_INT) ) {
                alt4=1;
            }
            else if ( (LA4_0==RULE_ID) ) {
                alt4=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 4, 0, input);

                throw nvae;
            }
            switch (alt4) {
                case 1 :
                    // InternalPattern.g:302:2: ( ( rule__PatternPort__MultiplicityValueAssignment_2_1_0 ) )
                    {
                    // InternalPattern.g:302:2: ( ( rule__PatternPort__MultiplicityValueAssignment_2_1_0 ) )
                    // InternalPattern.g:303:3: ( rule__PatternPort__MultiplicityValueAssignment_2_1_0 )
                    {
                     before(grammarAccess.getPatternPortAccess().getMultiplicityValueAssignment_2_1_0()); 
                    // InternalPattern.g:304:3: ( rule__PatternPort__MultiplicityValueAssignment_2_1_0 )
                    // InternalPattern.g:304:4: rule__PatternPort__MultiplicityValueAssignment_2_1_0
                    {
                    pushFollow(FOLLOW_2);
                    rule__PatternPort__MultiplicityValueAssignment_2_1_0();

                    state._fsp--;


                    }

                     after(grammarAccess.getPatternPortAccess().getMultiplicityValueAssignment_2_1_0()); 

                    }


                    }
                    break;
                case 2 :
                    // InternalPattern.g:308:2: ( ( rule__PatternPort__CardinalityElementAssignment_2_1_1 ) )
                    {
                    // InternalPattern.g:308:2: ( ( rule__PatternPort__CardinalityElementAssignment_2_1_1 ) )
                    // InternalPattern.g:309:3: ( rule__PatternPort__CardinalityElementAssignment_2_1_1 )
                    {
                     before(grammarAccess.getPatternPortAccess().getCardinalityElementAssignment_2_1_1()); 
                    // InternalPattern.g:310:3: ( rule__PatternPort__CardinalityElementAssignment_2_1_1 )
                    // InternalPattern.g:310:4: rule__PatternPort__CardinalityElementAssignment_2_1_1
                    {
                    pushFollow(FOLLOW_2);
                    rule__PatternPort__CardinalityElementAssignment_2_1_1();

                    state._fsp--;


                    }

                     after(grammarAccess.getPatternPortAccess().getCardinalityElementAssignment_2_1_1()); 

                    }


                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternPort__Alternatives_2_1"


    // $ANTLR start "rule__PatternPortDirection__Alternatives"
    // InternalPattern.g:318:1: rule__PatternPortDirection__Alternatives : ( ( ( 'unspec' ) ) | ( ( 'in' ) ) | ( ( 'out' ) ) | ( ( 'inout' ) ) );
    public final void rule__PatternPortDirection__Alternatives() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:322:1: ( ( ( 'unspec' ) ) | ( ( 'in' ) ) | ( ( 'out' ) ) | ( ( 'inout' ) ) )
            int alt5=4;
            switch ( input.LA(1) ) {
            case 11:
                {
                alt5=1;
                }
                break;
            case 12:
                {
                alt5=2;
                }
                break;
            case 13:
                {
                alt5=3;
                }
                break;
            case 14:
                {
                alt5=4;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 5, 0, input);

                throw nvae;
            }

            switch (alt5) {
                case 1 :
                    // InternalPattern.g:323:2: ( ( 'unspec' ) )
                    {
                    // InternalPattern.g:323:2: ( ( 'unspec' ) )
                    // InternalPattern.g:324:3: ( 'unspec' )
                    {
                     before(grammarAccess.getPatternPortDirectionAccess().getUNSPECIFIEDEnumLiteralDeclaration_0()); 
                    // InternalPattern.g:325:3: ( 'unspec' )
                    // InternalPattern.g:325:4: 'unspec'
                    {
                    match(input,11,FOLLOW_2); 

                    }

                     after(grammarAccess.getPatternPortDirectionAccess().getUNSPECIFIEDEnumLiteralDeclaration_0()); 

                    }


                    }
                    break;
                case 2 :
                    // InternalPattern.g:329:2: ( ( 'in' ) )
                    {
                    // InternalPattern.g:329:2: ( ( 'in' ) )
                    // InternalPattern.g:330:3: ( 'in' )
                    {
                     before(grammarAccess.getPatternPortDirectionAccess().getINEnumLiteralDeclaration_1()); 
                    // InternalPattern.g:331:3: ( 'in' )
                    // InternalPattern.g:331:4: 'in'
                    {
                    match(input,12,FOLLOW_2); 

                    }

                     after(grammarAccess.getPatternPortDirectionAccess().getINEnumLiteralDeclaration_1()); 

                    }


                    }
                    break;
                case 3 :
                    // InternalPattern.g:335:2: ( ( 'out' ) )
                    {
                    // InternalPattern.g:335:2: ( ( 'out' ) )
                    // InternalPattern.g:336:3: ( 'out' )
                    {
                     before(grammarAccess.getPatternPortDirectionAccess().getOUTEnumLiteralDeclaration_2()); 
                    // InternalPattern.g:337:3: ( 'out' )
                    // InternalPattern.g:337:4: 'out'
                    {
                    match(input,13,FOLLOW_2); 

                    }

                     after(grammarAccess.getPatternPortDirectionAccess().getOUTEnumLiteralDeclaration_2()); 

                    }


                    }
                    break;
                case 4 :
                    // InternalPattern.g:341:2: ( ( 'inout' ) )
                    {
                    // InternalPattern.g:341:2: ( ( 'inout' ) )
                    // InternalPattern.g:342:3: ( 'inout' )
                    {
                     before(grammarAccess.getPatternPortDirectionAccess().getINOUTEnumLiteralDeclaration_3()); 
                    // InternalPattern.g:343:3: ( 'inout' )
                    // InternalPattern.g:343:4: 'inout'
                    {
                    match(input,14,FOLLOW_2); 

                    }

                     after(grammarAccess.getPatternPortDirectionAccess().getINOUTEnumLiteralDeclaration_3()); 

                    }


                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternPortDirection__Alternatives"


    // $ANTLR start "rule__LinkType__Alternatives"
    // InternalPattern.g:351:1: rule__LinkType__Alternatives : ( ( ( 'Transpose' ) ) | ( ( 'Identity' ) ) | ( ( 'First' ) ) | ( ( 'Rotate' ) ) | ( ( 'ShiftC' ) ) | ( ( 'ShiftP' ) ) | ( ( 'FlattenC' ) ) | ( ( 'ForkC' ) ) | ( ( 'ForkP' ) ) | ( ( 'JoinC' ) ) | ( ( 'JoinP' ) ) | ( ( 'Last' ) ) );
    public final void rule__LinkType__Alternatives() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:355:1: ( ( ( 'Transpose' ) ) | ( ( 'Identity' ) ) | ( ( 'First' ) ) | ( ( 'Rotate' ) ) | ( ( 'ShiftC' ) ) | ( ( 'ShiftP' ) ) | ( ( 'FlattenC' ) ) | ( ( 'ForkC' ) ) | ( ( 'ForkP' ) ) | ( ( 'JoinC' ) ) | ( ( 'JoinP' ) ) | ( ( 'Last' ) ) )
            int alt6=12;
            switch ( input.LA(1) ) {
            case 15:
                {
                alt6=1;
                }
                break;
            case 16:
                {
                alt6=2;
                }
                break;
            case 17:
                {
                alt6=3;
                }
                break;
            case 18:
                {
                alt6=4;
                }
                break;
            case 19:
                {
                alt6=5;
                }
                break;
            case 20:
                {
                alt6=6;
                }
                break;
            case 21:
                {
                alt6=7;
                }
                break;
            case 22:
                {
                alt6=8;
                }
                break;
            case 23:
                {
                alt6=9;
                }
                break;
            case 24:
                {
                alt6=10;
                }
                break;
            case 25:
                {
                alt6=11;
                }
                break;
            case 26:
                {
                alt6=12;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 6, 0, input);

                throw nvae;
            }

            switch (alt6) {
                case 1 :
                    // InternalPattern.g:356:2: ( ( 'Transpose' ) )
                    {
                    // InternalPattern.g:356:2: ( ( 'Transpose' ) )
                    // InternalPattern.g:357:3: ( 'Transpose' )
                    {
                     before(grammarAccess.getLinkTypeAccess().getTRANSPOSEEnumLiteralDeclaration_0()); 
                    // InternalPattern.g:358:3: ( 'Transpose' )
                    // InternalPattern.g:358:4: 'Transpose'
                    {
                    match(input,15,FOLLOW_2); 

                    }

                     after(grammarAccess.getLinkTypeAccess().getTRANSPOSEEnumLiteralDeclaration_0()); 

                    }


                    }
                    break;
                case 2 :
                    // InternalPattern.g:362:2: ( ( 'Identity' ) )
                    {
                    // InternalPattern.g:362:2: ( ( 'Identity' ) )
                    // InternalPattern.g:363:3: ( 'Identity' )
                    {
                     before(grammarAccess.getLinkTypeAccess().getIDENTITYEnumLiteralDeclaration_1()); 
                    // InternalPattern.g:364:3: ( 'Identity' )
                    // InternalPattern.g:364:4: 'Identity'
                    {
                    match(input,16,FOLLOW_2); 

                    }

                     after(grammarAccess.getLinkTypeAccess().getIDENTITYEnumLiteralDeclaration_1()); 

                    }


                    }
                    break;
                case 3 :
                    // InternalPattern.g:368:2: ( ( 'First' ) )
                    {
                    // InternalPattern.g:368:2: ( ( 'First' ) )
                    // InternalPattern.g:369:3: ( 'First' )
                    {
                     before(grammarAccess.getLinkTypeAccess().getFIRSTEnumLiteralDeclaration_2()); 
                    // InternalPattern.g:370:3: ( 'First' )
                    // InternalPattern.g:370:4: 'First'
                    {
                    match(input,17,FOLLOW_2); 

                    }

                     after(grammarAccess.getLinkTypeAccess().getFIRSTEnumLiteralDeclaration_2()); 

                    }


                    }
                    break;
                case 4 :
                    // InternalPattern.g:374:2: ( ( 'Rotate' ) )
                    {
                    // InternalPattern.g:374:2: ( ( 'Rotate' ) )
                    // InternalPattern.g:375:3: ( 'Rotate' )
                    {
                     before(grammarAccess.getLinkTypeAccess().getROTATEEnumLiteralDeclaration_3()); 
                    // InternalPattern.g:376:3: ( 'Rotate' )
                    // InternalPattern.g:376:4: 'Rotate'
                    {
                    match(input,18,FOLLOW_2); 

                    }

                     after(grammarAccess.getLinkTypeAccess().getROTATEEnumLiteralDeclaration_3()); 

                    }


                    }
                    break;
                case 5 :
                    // InternalPattern.g:380:2: ( ( 'ShiftC' ) )
                    {
                    // InternalPattern.g:380:2: ( ( 'ShiftC' ) )
                    // InternalPattern.g:381:3: ( 'ShiftC' )
                    {
                     before(grammarAccess.getLinkTypeAccess().getSHIFTCEnumLiteralDeclaration_4()); 
                    // InternalPattern.g:382:3: ( 'ShiftC' )
                    // InternalPattern.g:382:4: 'ShiftC'
                    {
                    match(input,19,FOLLOW_2); 

                    }

                     after(grammarAccess.getLinkTypeAccess().getSHIFTCEnumLiteralDeclaration_4()); 

                    }


                    }
                    break;
                case 6 :
                    // InternalPattern.g:386:2: ( ( 'ShiftP' ) )
                    {
                    // InternalPattern.g:386:2: ( ( 'ShiftP' ) )
                    // InternalPattern.g:387:3: ( 'ShiftP' )
                    {
                     before(grammarAccess.getLinkTypeAccess().getSHIFTPEnumLiteralDeclaration_5()); 
                    // InternalPattern.g:388:3: ( 'ShiftP' )
                    // InternalPattern.g:388:4: 'ShiftP'
                    {
                    match(input,20,FOLLOW_2); 

                    }

                     after(grammarAccess.getLinkTypeAccess().getSHIFTPEnumLiteralDeclaration_5()); 

                    }


                    }
                    break;
                case 7 :
                    // InternalPattern.g:392:2: ( ( 'FlattenC' ) )
                    {
                    // InternalPattern.g:392:2: ( ( 'FlattenC' ) )
                    // InternalPattern.g:393:3: ( 'FlattenC' )
                    {
                     before(grammarAccess.getLinkTypeAccess().getFLATTENCEnumLiteralDeclaration_6()); 
                    // InternalPattern.g:394:3: ( 'FlattenC' )
                    // InternalPattern.g:394:4: 'FlattenC'
                    {
                    match(input,21,FOLLOW_2); 

                    }

                     after(grammarAccess.getLinkTypeAccess().getFLATTENCEnumLiteralDeclaration_6()); 

                    }


                    }
                    break;
                case 8 :
                    // InternalPattern.g:398:2: ( ( 'ForkC' ) )
                    {
                    // InternalPattern.g:398:2: ( ( 'ForkC' ) )
                    // InternalPattern.g:399:3: ( 'ForkC' )
                    {
                     before(grammarAccess.getLinkTypeAccess().getFORKCEnumLiteralDeclaration_7()); 
                    // InternalPattern.g:400:3: ( 'ForkC' )
                    // InternalPattern.g:400:4: 'ForkC'
                    {
                    match(input,22,FOLLOW_2); 

                    }

                     after(grammarAccess.getLinkTypeAccess().getFORKCEnumLiteralDeclaration_7()); 

                    }


                    }
                    break;
                case 9 :
                    // InternalPattern.g:404:2: ( ( 'ForkP' ) )
                    {
                    // InternalPattern.g:404:2: ( ( 'ForkP' ) )
                    // InternalPattern.g:405:3: ( 'ForkP' )
                    {
                     before(grammarAccess.getLinkTypeAccess().getFORKPEnumLiteralDeclaration_8()); 
                    // InternalPattern.g:406:3: ( 'ForkP' )
                    // InternalPattern.g:406:4: 'ForkP'
                    {
                    match(input,23,FOLLOW_2); 

                    }

                     after(grammarAccess.getLinkTypeAccess().getFORKPEnumLiteralDeclaration_8()); 

                    }


                    }
                    break;
                case 10 :
                    // InternalPattern.g:410:2: ( ( 'JoinC' ) )
                    {
                    // InternalPattern.g:410:2: ( ( 'JoinC' ) )
                    // InternalPattern.g:411:3: ( 'JoinC' )
                    {
                     before(grammarAccess.getLinkTypeAccess().getJOINCEnumLiteralDeclaration_9()); 
                    // InternalPattern.g:412:3: ( 'JoinC' )
                    // InternalPattern.g:412:4: 'JoinC'
                    {
                    match(input,24,FOLLOW_2); 

                    }

                     after(grammarAccess.getLinkTypeAccess().getJOINCEnumLiteralDeclaration_9()); 

                    }


                    }
                    break;
                case 11 :
                    // InternalPattern.g:416:2: ( ( 'JoinP' ) )
                    {
                    // InternalPattern.g:416:2: ( ( 'JoinP' ) )
                    // InternalPattern.g:417:3: ( 'JoinP' )
                    {
                     before(grammarAccess.getLinkTypeAccess().getJOINPEnumLiteralDeclaration_10()); 
                    // InternalPattern.g:418:3: ( 'JoinP' )
                    // InternalPattern.g:418:4: 'JoinP'
                    {
                    match(input,25,FOLLOW_2); 

                    }

                     after(grammarAccess.getLinkTypeAccess().getJOINPEnumLiteralDeclaration_10()); 

                    }


                    }
                    break;
                case 12 :
                    // InternalPattern.g:422:2: ( ( 'Last' ) )
                    {
                    // InternalPattern.g:422:2: ( ( 'Last' ) )
                    // InternalPattern.g:423:3: ( 'Last' )
                    {
                     before(grammarAccess.getLinkTypeAccess().getLASTEnumLiteralDeclaration_11()); 
                    // InternalPattern.g:424:3: ( 'Last' )
                    // InternalPattern.g:424:4: 'Last'
                    {
                    match(input,26,FOLLOW_2); 

                    }

                     after(grammarAccess.getLinkTypeAccess().getLASTEnumLiteralDeclaration_11()); 

                    }


                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__LinkType__Alternatives"


    // $ANTLR start "rule__Pattern__Group__0"
    // InternalPattern.g:432:1: rule__Pattern__Group__0 : rule__Pattern__Group__0__Impl rule__Pattern__Group__1 ;
    public final void rule__Pattern__Group__0() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:436:1: ( rule__Pattern__Group__0__Impl rule__Pattern__Group__1 )
            // InternalPattern.g:437:2: rule__Pattern__Group__0__Impl rule__Pattern__Group__1
            {
            pushFollow(FOLLOW_3);
            rule__Pattern__Group__0__Impl();

            state._fsp--;

            pushFollow(FOLLOW_2);
            rule__Pattern__Group__1();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Pattern__Group__0"


    // $ANTLR start "rule__Pattern__Group__0__Impl"
    // InternalPattern.g:444:1: rule__Pattern__Group__0__Impl : ( 'pattern' ) ;
    public final void rule__Pattern__Group__0__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:448:1: ( ( 'pattern' ) )
            // InternalPattern.g:449:1: ( 'pattern' )
            {
            // InternalPattern.g:449:1: ( 'pattern' )
            // InternalPattern.g:450:2: 'pattern'
            {
             before(grammarAccess.getPatternAccess().getPatternKeyword_0()); 
            match(input,27,FOLLOW_2); 
             after(grammarAccess.getPatternAccess().getPatternKeyword_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Pattern__Group__0__Impl"


    // $ANTLR start "rule__Pattern__Group__1"
    // InternalPattern.g:459:1: rule__Pattern__Group__1 : rule__Pattern__Group__1__Impl rule__Pattern__Group__2 ;
    public final void rule__Pattern__Group__1() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:463:1: ( rule__Pattern__Group__1__Impl rule__Pattern__Group__2 )
            // InternalPattern.g:464:2: rule__Pattern__Group__1__Impl rule__Pattern__Group__2
            {
            pushFollow(FOLLOW_4);
            rule__Pattern__Group__1__Impl();

            state._fsp--;

            pushFollow(FOLLOW_2);
            rule__Pattern__Group__2();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Pattern__Group__1"


    // $ANTLR start "rule__Pattern__Group__1__Impl"
    // InternalPattern.g:471:1: rule__Pattern__Group__1__Impl : ( ( rule__Pattern__NameAssignment_1 ) ) ;
    public final void rule__Pattern__Group__1__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:475:1: ( ( ( rule__Pattern__NameAssignment_1 ) ) )
            // InternalPattern.g:476:1: ( ( rule__Pattern__NameAssignment_1 ) )
            {
            // InternalPattern.g:476:1: ( ( rule__Pattern__NameAssignment_1 ) )
            // InternalPattern.g:477:2: ( rule__Pattern__NameAssignment_1 )
            {
             before(grammarAccess.getPatternAccess().getNameAssignment_1()); 
            // InternalPattern.g:478:2: ( rule__Pattern__NameAssignment_1 )
            // InternalPattern.g:478:3: rule__Pattern__NameAssignment_1
            {
            pushFollow(FOLLOW_2);
            rule__Pattern__NameAssignment_1();

            state._fsp--;


            }

             after(grammarAccess.getPatternAccess().getNameAssignment_1()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Pattern__Group__1__Impl"


    // $ANTLR start "rule__Pattern__Group__2"
    // InternalPattern.g:486:1: rule__Pattern__Group__2 : rule__Pattern__Group__2__Impl rule__Pattern__Group__3 ;
    public final void rule__Pattern__Group__2() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:490:1: ( rule__Pattern__Group__2__Impl rule__Pattern__Group__3 )
            // InternalPattern.g:491:2: rule__Pattern__Group__2__Impl rule__Pattern__Group__3
            {
            pushFollow(FOLLOW_5);
            rule__Pattern__Group__2__Impl();

            state._fsp--;

            pushFollow(FOLLOW_2);
            rule__Pattern__Group__3();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Pattern__Group__2"


    // $ANTLR start "rule__Pattern__Group__2__Impl"
    // InternalPattern.g:498:1: rule__Pattern__Group__2__Impl : ( '(' ) ;
    public final void rule__Pattern__Group__2__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:502:1: ( ( '(' ) )
            // InternalPattern.g:503:1: ( '(' )
            {
            // InternalPattern.g:503:1: ( '(' )
            // InternalPattern.g:504:2: '('
            {
             before(grammarAccess.getPatternAccess().getLeftParenthesisKeyword_2()); 
            match(input,28,FOLLOW_2); 
             after(grammarAccess.getPatternAccess().getLeftParenthesisKeyword_2()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Pattern__Group__2__Impl"


    // $ANTLR start "rule__Pattern__Group__3"
    // InternalPattern.g:513:1: rule__Pattern__Group__3 : rule__Pattern__Group__3__Impl rule__Pattern__Group__4 ;
    public final void rule__Pattern__Group__3() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:517:1: ( rule__Pattern__Group__3__Impl rule__Pattern__Group__4 )
            // InternalPattern.g:518:2: rule__Pattern__Group__3__Impl rule__Pattern__Group__4
            {
            pushFollow(FOLLOW_5);
            rule__Pattern__Group__3__Impl();

            state._fsp--;

            pushFollow(FOLLOW_2);
            rule__Pattern__Group__4();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Pattern__Group__3"


    // $ANTLR start "rule__Pattern__Group__3__Impl"
    // InternalPattern.g:525:1: rule__Pattern__Group__3__Impl : ( ( rule__Pattern__Group_3__0 )? ) ;
    public final void rule__Pattern__Group__3__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:529:1: ( ( ( rule__Pattern__Group_3__0 )? ) )
            // InternalPattern.g:530:1: ( ( rule__Pattern__Group_3__0 )? )
            {
            // InternalPattern.g:530:1: ( ( rule__Pattern__Group_3__0 )? )
            // InternalPattern.g:531:2: ( rule__Pattern__Group_3__0 )?
            {
             before(grammarAccess.getPatternAccess().getGroup_3()); 
            // InternalPattern.g:532:2: ( rule__Pattern__Group_3__0 )?
            int alt7=2;
            int LA7_0 = input.LA(1);

            if ( (LA7_0==RULE_ID) ) {
                alt7=1;
            }
            switch (alt7) {
                case 1 :
                    // InternalPattern.g:532:3: rule__Pattern__Group_3__0
                    {
                    pushFollow(FOLLOW_2);
                    rule__Pattern__Group_3__0();

                    state._fsp--;


                    }
                    break;

            }

             after(grammarAccess.getPatternAccess().getGroup_3()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Pattern__Group__3__Impl"


    // $ANTLR start "rule__Pattern__Group__4"
    // InternalPattern.g:540:1: rule__Pattern__Group__4 : rule__Pattern__Group__4__Impl rule__Pattern__Group__5 ;
    public final void rule__Pattern__Group__4() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:544:1: ( rule__Pattern__Group__4__Impl rule__Pattern__Group__5 )
            // InternalPattern.g:545:2: rule__Pattern__Group__4__Impl rule__Pattern__Group__5
            {
            pushFollow(FOLLOW_6);
            rule__Pattern__Group__4__Impl();

            state._fsp--;

            pushFollow(FOLLOW_2);
            rule__Pattern__Group__5();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Pattern__Group__4"


    // $ANTLR start "rule__Pattern__Group__4__Impl"
    // InternalPattern.g:552:1: rule__Pattern__Group__4__Impl : ( ')' ) ;
    public final void rule__Pattern__Group__4__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:556:1: ( ( ')' ) )
            // InternalPattern.g:557:1: ( ')' )
            {
            // InternalPattern.g:557:1: ( ')' )
            // InternalPattern.g:558:2: ')'
            {
             before(grammarAccess.getPatternAccess().getRightParenthesisKeyword_4()); 
            match(input,29,FOLLOW_2); 
             after(grammarAccess.getPatternAccess().getRightParenthesisKeyword_4()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Pattern__Group__4__Impl"


    // $ANTLR start "rule__Pattern__Group__5"
    // InternalPattern.g:567:1: rule__Pattern__Group__5 : rule__Pattern__Group__5__Impl ;
    public final void rule__Pattern__Group__5() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:571:1: ( rule__Pattern__Group__5__Impl )
            // InternalPattern.g:572:2: rule__Pattern__Group__5__Impl
            {
            pushFollow(FOLLOW_2);
            rule__Pattern__Group__5__Impl();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Pattern__Group__5"


    // $ANTLR start "rule__Pattern__Group__5__Impl"
    // InternalPattern.g:578:1: rule__Pattern__Group__5__Impl : ( ( rule__Pattern__Group_5__0 )? ) ;
    public final void rule__Pattern__Group__5__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:582:1: ( ( ( rule__Pattern__Group_5__0 )? ) )
            // InternalPattern.g:583:1: ( ( rule__Pattern__Group_5__0 )? )
            {
            // InternalPattern.g:583:1: ( ( rule__Pattern__Group_5__0 )? )
            // InternalPattern.g:584:2: ( rule__Pattern__Group_5__0 )?
            {
             before(grammarAccess.getPatternAccess().getGroup_5()); 
            // InternalPattern.g:585:2: ( rule__Pattern__Group_5__0 )?
            int alt8=2;
            int LA8_0 = input.LA(1);

            if ( (LA8_0==31) ) {
                alt8=1;
            }
            switch (alt8) {
                case 1 :
                    // InternalPattern.g:585:3: rule__Pattern__Group_5__0
                    {
                    pushFollow(FOLLOW_2);
                    rule__Pattern__Group_5__0();

                    state._fsp--;


                    }
                    break;

            }

             after(grammarAccess.getPatternAccess().getGroup_5()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Pattern__Group__5__Impl"


    // $ANTLR start "rule__Pattern__Group_3__0"
    // InternalPattern.g:594:1: rule__Pattern__Group_3__0 : rule__Pattern__Group_3__0__Impl rule__Pattern__Group_3__1 ;
    public final void rule__Pattern__Group_3__0() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:598:1: ( rule__Pattern__Group_3__0__Impl rule__Pattern__Group_3__1 )
            // InternalPattern.g:599:2: rule__Pattern__Group_3__0__Impl rule__Pattern__Group_3__1
            {
            pushFollow(FOLLOW_7);
            rule__Pattern__Group_3__0__Impl();

            state._fsp--;

            pushFollow(FOLLOW_2);
            rule__Pattern__Group_3__1();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Pattern__Group_3__0"


    // $ANTLR start "rule__Pattern__Group_3__0__Impl"
    // InternalPattern.g:606:1: rule__Pattern__Group_3__0__Impl : ( ( rule__Pattern__CardinalityElementsAssignment_3_0 ) ) ;
    public final void rule__Pattern__Group_3__0__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:610:1: ( ( ( rule__Pattern__CardinalityElementsAssignment_3_0 ) ) )
            // InternalPattern.g:611:1: ( ( rule__Pattern__CardinalityElementsAssignment_3_0 ) )
            {
            // InternalPattern.g:611:1: ( ( rule__Pattern__CardinalityElementsAssignment_3_0 ) )
            // InternalPattern.g:612:2: ( rule__Pattern__CardinalityElementsAssignment_3_0 )
            {
             before(grammarAccess.getPatternAccess().getCardinalityElementsAssignment_3_0()); 
            // InternalPattern.g:613:2: ( rule__Pattern__CardinalityElementsAssignment_3_0 )
            // InternalPattern.g:613:3: rule__Pattern__CardinalityElementsAssignment_3_0
            {
            pushFollow(FOLLOW_2);
            rule__Pattern__CardinalityElementsAssignment_3_0();

            state._fsp--;


            }

             after(grammarAccess.getPatternAccess().getCardinalityElementsAssignment_3_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Pattern__Group_3__0__Impl"


    // $ANTLR start "rule__Pattern__Group_3__1"
    // InternalPattern.g:621:1: rule__Pattern__Group_3__1 : rule__Pattern__Group_3__1__Impl ;
    public final void rule__Pattern__Group_3__1() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:625:1: ( rule__Pattern__Group_3__1__Impl )
            // InternalPattern.g:626:2: rule__Pattern__Group_3__1__Impl
            {
            pushFollow(FOLLOW_2);
            rule__Pattern__Group_3__1__Impl();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Pattern__Group_3__1"


    // $ANTLR start "rule__Pattern__Group_3__1__Impl"
    // InternalPattern.g:632:1: rule__Pattern__Group_3__1__Impl : ( ( rule__Pattern__Group_3_1__0 )* ) ;
    public final void rule__Pattern__Group_3__1__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:636:1: ( ( ( rule__Pattern__Group_3_1__0 )* ) )
            // InternalPattern.g:637:1: ( ( rule__Pattern__Group_3_1__0 )* )
            {
            // InternalPattern.g:637:1: ( ( rule__Pattern__Group_3_1__0 )* )
            // InternalPattern.g:638:2: ( rule__Pattern__Group_3_1__0 )*
            {
             before(grammarAccess.getPatternAccess().getGroup_3_1()); 
            // InternalPattern.g:639:2: ( rule__Pattern__Group_3_1__0 )*
            loop9:
            do {
                int alt9=2;
                int LA9_0 = input.LA(1);

                if ( (LA9_0==30) ) {
                    alt9=1;
                }


                switch (alt9) {
            	case 1 :
            	    // InternalPattern.g:639:3: rule__Pattern__Group_3_1__0
            	    {
            	    pushFollow(FOLLOW_8);
            	    rule__Pattern__Group_3_1__0();

            	    state._fsp--;


            	    }
            	    break;

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

             after(grammarAccess.getPatternAccess().getGroup_3_1()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Pattern__Group_3__1__Impl"


    // $ANTLR start "rule__Pattern__Group_3_1__0"
    // InternalPattern.g:648:1: rule__Pattern__Group_3_1__0 : rule__Pattern__Group_3_1__0__Impl rule__Pattern__Group_3_1__1 ;
    public final void rule__Pattern__Group_3_1__0() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:652:1: ( rule__Pattern__Group_3_1__0__Impl rule__Pattern__Group_3_1__1 )
            // InternalPattern.g:653:2: rule__Pattern__Group_3_1__0__Impl rule__Pattern__Group_3_1__1
            {
            pushFollow(FOLLOW_3);
            rule__Pattern__Group_3_1__0__Impl();

            state._fsp--;

            pushFollow(FOLLOW_2);
            rule__Pattern__Group_3_1__1();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Pattern__Group_3_1__0"


    // $ANTLR start "rule__Pattern__Group_3_1__0__Impl"
    // InternalPattern.g:660:1: rule__Pattern__Group_3_1__0__Impl : ( ',' ) ;
    public final void rule__Pattern__Group_3_1__0__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:664:1: ( ( ',' ) )
            // InternalPattern.g:665:1: ( ',' )
            {
            // InternalPattern.g:665:1: ( ',' )
            // InternalPattern.g:666:2: ','
            {
             before(grammarAccess.getPatternAccess().getCommaKeyword_3_1_0()); 
            match(input,30,FOLLOW_2); 
             after(grammarAccess.getPatternAccess().getCommaKeyword_3_1_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Pattern__Group_3_1__0__Impl"


    // $ANTLR start "rule__Pattern__Group_3_1__1"
    // InternalPattern.g:675:1: rule__Pattern__Group_3_1__1 : rule__Pattern__Group_3_1__1__Impl ;
    public final void rule__Pattern__Group_3_1__1() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:679:1: ( rule__Pattern__Group_3_1__1__Impl )
            // InternalPattern.g:680:2: rule__Pattern__Group_3_1__1__Impl
            {
            pushFollow(FOLLOW_2);
            rule__Pattern__Group_3_1__1__Impl();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Pattern__Group_3_1__1"


    // $ANTLR start "rule__Pattern__Group_3_1__1__Impl"
    // InternalPattern.g:686:1: rule__Pattern__Group_3_1__1__Impl : ( ( rule__Pattern__CardinalityElementsAssignment_3_1_1 ) ) ;
    public final void rule__Pattern__Group_3_1__1__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:690:1: ( ( ( rule__Pattern__CardinalityElementsAssignment_3_1_1 ) ) )
            // InternalPattern.g:691:1: ( ( rule__Pattern__CardinalityElementsAssignment_3_1_1 ) )
            {
            // InternalPattern.g:691:1: ( ( rule__Pattern__CardinalityElementsAssignment_3_1_1 ) )
            // InternalPattern.g:692:2: ( rule__Pattern__CardinalityElementsAssignment_3_1_1 )
            {
             before(grammarAccess.getPatternAccess().getCardinalityElementsAssignment_3_1_1()); 
            // InternalPattern.g:693:2: ( rule__Pattern__CardinalityElementsAssignment_3_1_1 )
            // InternalPattern.g:693:3: rule__Pattern__CardinalityElementsAssignment_3_1_1
            {
            pushFollow(FOLLOW_2);
            rule__Pattern__CardinalityElementsAssignment_3_1_1();

            state._fsp--;


            }

             after(grammarAccess.getPatternAccess().getCardinalityElementsAssignment_3_1_1()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Pattern__Group_3_1__1__Impl"


    // $ANTLR start "rule__Pattern__Group_5__0"
    // InternalPattern.g:702:1: rule__Pattern__Group_5__0 : rule__Pattern__Group_5__0__Impl rule__Pattern__Group_5__1 ;
    public final void rule__Pattern__Group_5__0() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:706:1: ( rule__Pattern__Group_5__0__Impl rule__Pattern__Group_5__1 )
            // InternalPattern.g:707:2: rule__Pattern__Group_5__0__Impl rule__Pattern__Group_5__1
            {
            pushFollow(FOLLOW_9);
            rule__Pattern__Group_5__0__Impl();

            state._fsp--;

            pushFollow(FOLLOW_2);
            rule__Pattern__Group_5__1();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Pattern__Group_5__0"


    // $ANTLR start "rule__Pattern__Group_5__0__Impl"
    // InternalPattern.g:714:1: rule__Pattern__Group_5__0__Impl : ( '{' ) ;
    public final void rule__Pattern__Group_5__0__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:718:1: ( ( '{' ) )
            // InternalPattern.g:719:1: ( '{' )
            {
            // InternalPattern.g:719:1: ( '{' )
            // InternalPattern.g:720:2: '{'
            {
             before(grammarAccess.getPatternAccess().getLeftCurlyBracketKeyword_5_0()); 
            match(input,31,FOLLOW_2); 
             after(grammarAccess.getPatternAccess().getLeftCurlyBracketKeyword_5_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Pattern__Group_5__0__Impl"


    // $ANTLR start "rule__Pattern__Group_5__1"
    // InternalPattern.g:729:1: rule__Pattern__Group_5__1 : rule__Pattern__Group_5__1__Impl rule__Pattern__Group_5__2 ;
    public final void rule__Pattern__Group_5__1() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:733:1: ( rule__Pattern__Group_5__1__Impl rule__Pattern__Group_5__2 )
            // InternalPattern.g:734:2: rule__Pattern__Group_5__1__Impl rule__Pattern__Group_5__2
            {
            pushFollow(FOLLOW_9);
            rule__Pattern__Group_5__1__Impl();

            state._fsp--;

            pushFollow(FOLLOW_2);
            rule__Pattern__Group_5__2();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Pattern__Group_5__1"


    // $ANTLR start "rule__Pattern__Group_5__1__Impl"
    // InternalPattern.g:741:1: rule__Pattern__Group_5__1__Impl : ( ( rule__Pattern__Alternatives_5_1 )* ) ;
    public final void rule__Pattern__Group_5__1__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:745:1: ( ( ( rule__Pattern__Alternatives_5_1 )* ) )
            // InternalPattern.g:746:1: ( ( rule__Pattern__Alternatives_5_1 )* )
            {
            // InternalPattern.g:746:1: ( ( rule__Pattern__Alternatives_5_1 )* )
            // InternalPattern.g:747:2: ( rule__Pattern__Alternatives_5_1 )*
            {
             before(grammarAccess.getPatternAccess().getAlternatives_5_1()); 
            // InternalPattern.g:748:2: ( rule__Pattern__Alternatives_5_1 )*
            loop10:
            do {
                int alt10=2;
                int LA10_0 = input.LA(1);

                if ( (LA10_0==RULE_ID||LA10_0==33) ) {
                    alt10=1;
                }


                switch (alt10) {
            	case 1 :
            	    // InternalPattern.g:748:3: rule__Pattern__Alternatives_5_1
            	    {
            	    pushFollow(FOLLOW_10);
            	    rule__Pattern__Alternatives_5_1();

            	    state._fsp--;


            	    }
            	    break;

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

             after(grammarAccess.getPatternAccess().getAlternatives_5_1()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Pattern__Group_5__1__Impl"


    // $ANTLR start "rule__Pattern__Group_5__2"
    // InternalPattern.g:756:1: rule__Pattern__Group_5__2 : rule__Pattern__Group_5__2__Impl ;
    public final void rule__Pattern__Group_5__2() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:760:1: ( rule__Pattern__Group_5__2__Impl )
            // InternalPattern.g:761:2: rule__Pattern__Group_5__2__Impl
            {
            pushFollow(FOLLOW_2);
            rule__Pattern__Group_5__2__Impl();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Pattern__Group_5__2"


    // $ANTLR start "rule__Pattern__Group_5__2__Impl"
    // InternalPattern.g:767:1: rule__Pattern__Group_5__2__Impl : ( '}' ) ;
    public final void rule__Pattern__Group_5__2__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:771:1: ( ( '}' ) )
            // InternalPattern.g:772:1: ( '}' )
            {
            // InternalPattern.g:772:1: ( '}' )
            // InternalPattern.g:773:2: '}'
            {
             before(grammarAccess.getPatternAccess().getRightCurlyBracketKeyword_5_2()); 
            match(input,32,FOLLOW_2); 
             after(grammarAccess.getPatternAccess().getRightCurlyBracketKeyword_5_2()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Pattern__Group_5__2__Impl"


    // $ANTLR start "rule__PatternComponent__Group__0"
    // InternalPattern.g:783:1: rule__PatternComponent__Group__0 : rule__PatternComponent__Group__0__Impl rule__PatternComponent__Group__1 ;
    public final void rule__PatternComponent__Group__0() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:787:1: ( rule__PatternComponent__Group__0__Impl rule__PatternComponent__Group__1 )
            // InternalPattern.g:788:2: rule__PatternComponent__Group__0__Impl rule__PatternComponent__Group__1
            {
            pushFollow(FOLLOW_3);
            rule__PatternComponent__Group__0__Impl();

            state._fsp--;

            pushFollow(FOLLOW_2);
            rule__PatternComponent__Group__1();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__Group__0"


    // $ANTLR start "rule__PatternComponent__Group__0__Impl"
    // InternalPattern.g:795:1: rule__PatternComponent__Group__0__Impl : ( 'component' ) ;
    public final void rule__PatternComponent__Group__0__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:799:1: ( ( 'component' ) )
            // InternalPattern.g:800:1: ( 'component' )
            {
            // InternalPattern.g:800:1: ( 'component' )
            // InternalPattern.g:801:2: 'component'
            {
             before(grammarAccess.getPatternComponentAccess().getComponentKeyword_0()); 
            match(input,33,FOLLOW_2); 
             after(grammarAccess.getPatternComponentAccess().getComponentKeyword_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__Group__0__Impl"


    // $ANTLR start "rule__PatternComponent__Group__1"
    // InternalPattern.g:810:1: rule__PatternComponent__Group__1 : rule__PatternComponent__Group__1__Impl rule__PatternComponent__Group__2 ;
    public final void rule__PatternComponent__Group__1() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:814:1: ( rule__PatternComponent__Group__1__Impl rule__PatternComponent__Group__2 )
            // InternalPattern.g:815:2: rule__PatternComponent__Group__1__Impl rule__PatternComponent__Group__2
            {
            pushFollow(FOLLOW_11);
            rule__PatternComponent__Group__1__Impl();

            state._fsp--;

            pushFollow(FOLLOW_2);
            rule__PatternComponent__Group__2();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__Group__1"


    // $ANTLR start "rule__PatternComponent__Group__1__Impl"
    // InternalPattern.g:822:1: rule__PatternComponent__Group__1__Impl : ( ( rule__PatternComponent__NameAssignment_1 ) ) ;
    public final void rule__PatternComponent__Group__1__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:826:1: ( ( ( rule__PatternComponent__NameAssignment_1 ) ) )
            // InternalPattern.g:827:1: ( ( rule__PatternComponent__NameAssignment_1 ) )
            {
            // InternalPattern.g:827:1: ( ( rule__PatternComponent__NameAssignment_1 ) )
            // InternalPattern.g:828:2: ( rule__PatternComponent__NameAssignment_1 )
            {
             before(grammarAccess.getPatternComponentAccess().getNameAssignment_1()); 
            // InternalPattern.g:829:2: ( rule__PatternComponent__NameAssignment_1 )
            // InternalPattern.g:829:3: rule__PatternComponent__NameAssignment_1
            {
            pushFollow(FOLLOW_2);
            rule__PatternComponent__NameAssignment_1();

            state._fsp--;


            }

             after(grammarAccess.getPatternComponentAccess().getNameAssignment_1()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__Group__1__Impl"


    // $ANTLR start "rule__PatternComponent__Group__2"
    // InternalPattern.g:837:1: rule__PatternComponent__Group__2 : rule__PatternComponent__Group__2__Impl rule__PatternComponent__Group__3 ;
    public final void rule__PatternComponent__Group__2() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:841:1: ( rule__PatternComponent__Group__2__Impl rule__PatternComponent__Group__3 )
            // InternalPattern.g:842:2: rule__PatternComponent__Group__2__Impl rule__PatternComponent__Group__3
            {
            pushFollow(FOLLOW_11);
            rule__PatternComponent__Group__2__Impl();

            state._fsp--;

            pushFollow(FOLLOW_2);
            rule__PatternComponent__Group__3();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__Group__2"


    // $ANTLR start "rule__PatternComponent__Group__2__Impl"
    // InternalPattern.g:849:1: rule__PatternComponent__Group__2__Impl : ( ( rule__PatternComponent__Group_2__0 )? ) ;
    public final void rule__PatternComponent__Group__2__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:853:1: ( ( ( rule__PatternComponent__Group_2__0 )? ) )
            // InternalPattern.g:854:1: ( ( rule__PatternComponent__Group_2__0 )? )
            {
            // InternalPattern.g:854:1: ( ( rule__PatternComponent__Group_2__0 )? )
            // InternalPattern.g:855:2: ( rule__PatternComponent__Group_2__0 )?
            {
             before(grammarAccess.getPatternComponentAccess().getGroup_2()); 
            // InternalPattern.g:856:2: ( rule__PatternComponent__Group_2__0 )?
            int alt11=2;
            int LA11_0 = input.LA(1);

            if ( (LA11_0==34) ) {
                alt11=1;
            }
            switch (alt11) {
                case 1 :
                    // InternalPattern.g:856:3: rule__PatternComponent__Group_2__0
                    {
                    pushFollow(FOLLOW_2);
                    rule__PatternComponent__Group_2__0();

                    state._fsp--;


                    }
                    break;

            }

             after(grammarAccess.getPatternComponentAccess().getGroup_2()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__Group__2__Impl"


    // $ANTLR start "rule__PatternComponent__Group__3"
    // InternalPattern.g:864:1: rule__PatternComponent__Group__3 : rule__PatternComponent__Group__3__Impl rule__PatternComponent__Group__4 ;
    public final void rule__PatternComponent__Group__3() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:868:1: ( rule__PatternComponent__Group__3__Impl rule__PatternComponent__Group__4 )
            // InternalPattern.g:869:2: rule__PatternComponent__Group__3__Impl rule__PatternComponent__Group__4
            {
            pushFollow(FOLLOW_12);
            rule__PatternComponent__Group__3__Impl();

            state._fsp--;

            pushFollow(FOLLOW_2);
            rule__PatternComponent__Group__4();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__Group__3"


    // $ANTLR start "rule__PatternComponent__Group__3__Impl"
    // InternalPattern.g:876:1: rule__PatternComponent__Group__3__Impl : ( '(' ) ;
    public final void rule__PatternComponent__Group__3__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:880:1: ( ( '(' ) )
            // InternalPattern.g:881:1: ( '(' )
            {
            // InternalPattern.g:881:1: ( '(' )
            // InternalPattern.g:882:2: '('
            {
             before(grammarAccess.getPatternComponentAccess().getLeftParenthesisKeyword_3()); 
            match(input,28,FOLLOW_2); 
             after(grammarAccess.getPatternComponentAccess().getLeftParenthesisKeyword_3()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__Group__3__Impl"


    // $ANTLR start "rule__PatternComponent__Group__4"
    // InternalPattern.g:891:1: rule__PatternComponent__Group__4 : rule__PatternComponent__Group__4__Impl rule__PatternComponent__Group__5 ;
    public final void rule__PatternComponent__Group__4() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:895:1: ( rule__PatternComponent__Group__4__Impl rule__PatternComponent__Group__5 )
            // InternalPattern.g:896:2: rule__PatternComponent__Group__4__Impl rule__PatternComponent__Group__5
            {
            pushFollow(FOLLOW_12);
            rule__PatternComponent__Group__4__Impl();

            state._fsp--;

            pushFollow(FOLLOW_2);
            rule__PatternComponent__Group__5();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__Group__4"


    // $ANTLR start "rule__PatternComponent__Group__4__Impl"
    // InternalPattern.g:903:1: rule__PatternComponent__Group__4__Impl : ( ( rule__PatternComponent__Group_4__0 )? ) ;
    public final void rule__PatternComponent__Group__4__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:907:1: ( ( ( rule__PatternComponent__Group_4__0 )? ) )
            // InternalPattern.g:908:1: ( ( rule__PatternComponent__Group_4__0 )? )
            {
            // InternalPattern.g:908:1: ( ( rule__PatternComponent__Group_4__0 )? )
            // InternalPattern.g:909:2: ( rule__PatternComponent__Group_4__0 )?
            {
             before(grammarAccess.getPatternComponentAccess().getGroup_4()); 
            // InternalPattern.g:910:2: ( rule__PatternComponent__Group_4__0 )?
            int alt12=2;
            int LA12_0 = input.LA(1);

            if ( ((LA12_0>=11 && LA12_0<=14)) ) {
                alt12=1;
            }
            switch (alt12) {
                case 1 :
                    // InternalPattern.g:910:3: rule__PatternComponent__Group_4__0
                    {
                    pushFollow(FOLLOW_2);
                    rule__PatternComponent__Group_4__0();

                    state._fsp--;


                    }
                    break;

            }

             after(grammarAccess.getPatternComponentAccess().getGroup_4()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__Group__4__Impl"


    // $ANTLR start "rule__PatternComponent__Group__5"
    // InternalPattern.g:918:1: rule__PatternComponent__Group__5 : rule__PatternComponent__Group__5__Impl rule__PatternComponent__Group__6 ;
    public final void rule__PatternComponent__Group__5() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:922:1: ( rule__PatternComponent__Group__5__Impl rule__PatternComponent__Group__6 )
            // InternalPattern.g:923:2: rule__PatternComponent__Group__5__Impl rule__PatternComponent__Group__6
            {
            pushFollow(FOLLOW_6);
            rule__PatternComponent__Group__5__Impl();

            state._fsp--;

            pushFollow(FOLLOW_2);
            rule__PatternComponent__Group__6();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__Group__5"


    // $ANTLR start "rule__PatternComponent__Group__5__Impl"
    // InternalPattern.g:930:1: rule__PatternComponent__Group__5__Impl : ( ')' ) ;
    public final void rule__PatternComponent__Group__5__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:934:1: ( ( ')' ) )
            // InternalPattern.g:935:1: ( ')' )
            {
            // InternalPattern.g:935:1: ( ')' )
            // InternalPattern.g:936:2: ')'
            {
             before(grammarAccess.getPatternComponentAccess().getRightParenthesisKeyword_5()); 
            match(input,29,FOLLOW_2); 
             after(grammarAccess.getPatternComponentAccess().getRightParenthesisKeyword_5()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__Group__5__Impl"


    // $ANTLR start "rule__PatternComponent__Group__6"
    // InternalPattern.g:945:1: rule__PatternComponent__Group__6 : rule__PatternComponent__Group__6__Impl ;
    public final void rule__PatternComponent__Group__6() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:949:1: ( rule__PatternComponent__Group__6__Impl )
            // InternalPattern.g:950:2: rule__PatternComponent__Group__6__Impl
            {
            pushFollow(FOLLOW_2);
            rule__PatternComponent__Group__6__Impl();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__Group__6"


    // $ANTLR start "rule__PatternComponent__Group__6__Impl"
    // InternalPattern.g:956:1: rule__PatternComponent__Group__6__Impl : ( ( rule__PatternComponent__Group_6__0 )? ) ;
    public final void rule__PatternComponent__Group__6__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:960:1: ( ( ( rule__PatternComponent__Group_6__0 )? ) )
            // InternalPattern.g:961:1: ( ( rule__PatternComponent__Group_6__0 )? )
            {
            // InternalPattern.g:961:1: ( ( rule__PatternComponent__Group_6__0 )? )
            // InternalPattern.g:962:2: ( rule__PatternComponent__Group_6__0 )?
            {
             before(grammarAccess.getPatternComponentAccess().getGroup_6()); 
            // InternalPattern.g:963:2: ( rule__PatternComponent__Group_6__0 )?
            int alt13=2;
            int LA13_0 = input.LA(1);

            if ( (LA13_0==31) ) {
                alt13=1;
            }
            switch (alt13) {
                case 1 :
                    // InternalPattern.g:963:3: rule__PatternComponent__Group_6__0
                    {
                    pushFollow(FOLLOW_2);
                    rule__PatternComponent__Group_6__0();

                    state._fsp--;


                    }
                    break;

            }

             after(grammarAccess.getPatternComponentAccess().getGroup_6()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__Group__6__Impl"


    // $ANTLR start "rule__PatternComponent__Group_2__0"
    // InternalPattern.g:972:1: rule__PatternComponent__Group_2__0 : rule__PatternComponent__Group_2__0__Impl rule__PatternComponent__Group_2__1 ;
    public final void rule__PatternComponent__Group_2__0() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:976:1: ( rule__PatternComponent__Group_2__0__Impl rule__PatternComponent__Group_2__1 )
            // InternalPattern.g:977:2: rule__PatternComponent__Group_2__0__Impl rule__PatternComponent__Group_2__1
            {
            pushFollow(FOLLOW_13);
            rule__PatternComponent__Group_2__0__Impl();

            state._fsp--;

            pushFollow(FOLLOW_2);
            rule__PatternComponent__Group_2__1();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__Group_2__0"


    // $ANTLR start "rule__PatternComponent__Group_2__0__Impl"
    // InternalPattern.g:984:1: rule__PatternComponent__Group_2__0__Impl : ( '[' ) ;
    public final void rule__PatternComponent__Group_2__0__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:988:1: ( ( '[' ) )
            // InternalPattern.g:989:1: ( '[' )
            {
            // InternalPattern.g:989:1: ( '[' )
            // InternalPattern.g:990:2: '['
            {
             before(grammarAccess.getPatternComponentAccess().getLeftSquareBracketKeyword_2_0()); 
            match(input,34,FOLLOW_2); 
             after(grammarAccess.getPatternComponentAccess().getLeftSquareBracketKeyword_2_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__Group_2__0__Impl"


    // $ANTLR start "rule__PatternComponent__Group_2__1"
    // InternalPattern.g:999:1: rule__PatternComponent__Group_2__1 : rule__PatternComponent__Group_2__1__Impl rule__PatternComponent__Group_2__2 ;
    public final void rule__PatternComponent__Group_2__1() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1003:1: ( rule__PatternComponent__Group_2__1__Impl rule__PatternComponent__Group_2__2 )
            // InternalPattern.g:1004:2: rule__PatternComponent__Group_2__1__Impl rule__PatternComponent__Group_2__2
            {
            pushFollow(FOLLOW_14);
            rule__PatternComponent__Group_2__1__Impl();

            state._fsp--;

            pushFollow(FOLLOW_2);
            rule__PatternComponent__Group_2__2();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__Group_2__1"


    // $ANTLR start "rule__PatternComponent__Group_2__1__Impl"
    // InternalPattern.g:1011:1: rule__PatternComponent__Group_2__1__Impl : ( ( rule__PatternComponent__Alternatives_2_1 ) ) ;
    public final void rule__PatternComponent__Group_2__1__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1015:1: ( ( ( rule__PatternComponent__Alternatives_2_1 ) ) )
            // InternalPattern.g:1016:1: ( ( rule__PatternComponent__Alternatives_2_1 ) )
            {
            // InternalPattern.g:1016:1: ( ( rule__PatternComponent__Alternatives_2_1 ) )
            // InternalPattern.g:1017:2: ( rule__PatternComponent__Alternatives_2_1 )
            {
             before(grammarAccess.getPatternComponentAccess().getAlternatives_2_1()); 
            // InternalPattern.g:1018:2: ( rule__PatternComponent__Alternatives_2_1 )
            // InternalPattern.g:1018:3: rule__PatternComponent__Alternatives_2_1
            {
            pushFollow(FOLLOW_2);
            rule__PatternComponent__Alternatives_2_1();

            state._fsp--;


            }

             after(grammarAccess.getPatternComponentAccess().getAlternatives_2_1()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__Group_2__1__Impl"


    // $ANTLR start "rule__PatternComponent__Group_2__2"
    // InternalPattern.g:1026:1: rule__PatternComponent__Group_2__2 : rule__PatternComponent__Group_2__2__Impl ;
    public final void rule__PatternComponent__Group_2__2() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1030:1: ( rule__PatternComponent__Group_2__2__Impl )
            // InternalPattern.g:1031:2: rule__PatternComponent__Group_2__2__Impl
            {
            pushFollow(FOLLOW_2);
            rule__PatternComponent__Group_2__2__Impl();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__Group_2__2"


    // $ANTLR start "rule__PatternComponent__Group_2__2__Impl"
    // InternalPattern.g:1037:1: rule__PatternComponent__Group_2__2__Impl : ( ']' ) ;
    public final void rule__PatternComponent__Group_2__2__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1041:1: ( ( ']' ) )
            // InternalPattern.g:1042:1: ( ']' )
            {
            // InternalPattern.g:1042:1: ( ']' )
            // InternalPattern.g:1043:2: ']'
            {
             before(grammarAccess.getPatternComponentAccess().getRightSquareBracketKeyword_2_2()); 
            match(input,35,FOLLOW_2); 
             after(grammarAccess.getPatternComponentAccess().getRightSquareBracketKeyword_2_2()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__Group_2__2__Impl"


    // $ANTLR start "rule__PatternComponent__Group_4__0"
    // InternalPattern.g:1053:1: rule__PatternComponent__Group_4__0 : rule__PatternComponent__Group_4__0__Impl rule__PatternComponent__Group_4__1 ;
    public final void rule__PatternComponent__Group_4__0() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1057:1: ( rule__PatternComponent__Group_4__0__Impl rule__PatternComponent__Group_4__1 )
            // InternalPattern.g:1058:2: rule__PatternComponent__Group_4__0__Impl rule__PatternComponent__Group_4__1
            {
            pushFollow(FOLLOW_7);
            rule__PatternComponent__Group_4__0__Impl();

            state._fsp--;

            pushFollow(FOLLOW_2);
            rule__PatternComponent__Group_4__1();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__Group_4__0"


    // $ANTLR start "rule__PatternComponent__Group_4__0__Impl"
    // InternalPattern.g:1065:1: rule__PatternComponent__Group_4__0__Impl : ( ( rule__PatternComponent__ContentAssignment_4_0 ) ) ;
    public final void rule__PatternComponent__Group_4__0__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1069:1: ( ( ( rule__PatternComponent__ContentAssignment_4_0 ) ) )
            // InternalPattern.g:1070:1: ( ( rule__PatternComponent__ContentAssignment_4_0 ) )
            {
            // InternalPattern.g:1070:1: ( ( rule__PatternComponent__ContentAssignment_4_0 ) )
            // InternalPattern.g:1071:2: ( rule__PatternComponent__ContentAssignment_4_0 )
            {
             before(grammarAccess.getPatternComponentAccess().getContentAssignment_4_0()); 
            // InternalPattern.g:1072:2: ( rule__PatternComponent__ContentAssignment_4_0 )
            // InternalPattern.g:1072:3: rule__PatternComponent__ContentAssignment_4_0
            {
            pushFollow(FOLLOW_2);
            rule__PatternComponent__ContentAssignment_4_0();

            state._fsp--;


            }

             after(grammarAccess.getPatternComponentAccess().getContentAssignment_4_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__Group_4__0__Impl"


    // $ANTLR start "rule__PatternComponent__Group_4__1"
    // InternalPattern.g:1080:1: rule__PatternComponent__Group_4__1 : rule__PatternComponent__Group_4__1__Impl ;
    public final void rule__PatternComponent__Group_4__1() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1084:1: ( rule__PatternComponent__Group_4__1__Impl )
            // InternalPattern.g:1085:2: rule__PatternComponent__Group_4__1__Impl
            {
            pushFollow(FOLLOW_2);
            rule__PatternComponent__Group_4__1__Impl();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__Group_4__1"


    // $ANTLR start "rule__PatternComponent__Group_4__1__Impl"
    // InternalPattern.g:1091:1: rule__PatternComponent__Group_4__1__Impl : ( ( rule__PatternComponent__Group_4_1__0 )* ) ;
    public final void rule__PatternComponent__Group_4__1__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1095:1: ( ( ( rule__PatternComponent__Group_4_1__0 )* ) )
            // InternalPattern.g:1096:1: ( ( rule__PatternComponent__Group_4_1__0 )* )
            {
            // InternalPattern.g:1096:1: ( ( rule__PatternComponent__Group_4_1__0 )* )
            // InternalPattern.g:1097:2: ( rule__PatternComponent__Group_4_1__0 )*
            {
             before(grammarAccess.getPatternComponentAccess().getGroup_4_1()); 
            // InternalPattern.g:1098:2: ( rule__PatternComponent__Group_4_1__0 )*
            loop14:
            do {
                int alt14=2;
                int LA14_0 = input.LA(1);

                if ( (LA14_0==30) ) {
                    alt14=1;
                }


                switch (alt14) {
            	case 1 :
            	    // InternalPattern.g:1098:3: rule__PatternComponent__Group_4_1__0
            	    {
            	    pushFollow(FOLLOW_8);
            	    rule__PatternComponent__Group_4_1__0();

            	    state._fsp--;


            	    }
            	    break;

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

             after(grammarAccess.getPatternComponentAccess().getGroup_4_1()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__Group_4__1__Impl"


    // $ANTLR start "rule__PatternComponent__Group_4_1__0"
    // InternalPattern.g:1107:1: rule__PatternComponent__Group_4_1__0 : rule__PatternComponent__Group_4_1__0__Impl rule__PatternComponent__Group_4_1__1 ;
    public final void rule__PatternComponent__Group_4_1__0() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1111:1: ( rule__PatternComponent__Group_4_1__0__Impl rule__PatternComponent__Group_4_1__1 )
            // InternalPattern.g:1112:2: rule__PatternComponent__Group_4_1__0__Impl rule__PatternComponent__Group_4_1__1
            {
            pushFollow(FOLLOW_15);
            rule__PatternComponent__Group_4_1__0__Impl();

            state._fsp--;

            pushFollow(FOLLOW_2);
            rule__PatternComponent__Group_4_1__1();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__Group_4_1__0"


    // $ANTLR start "rule__PatternComponent__Group_4_1__0__Impl"
    // InternalPattern.g:1119:1: rule__PatternComponent__Group_4_1__0__Impl : ( ',' ) ;
    public final void rule__PatternComponent__Group_4_1__0__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1123:1: ( ( ',' ) )
            // InternalPattern.g:1124:1: ( ',' )
            {
            // InternalPattern.g:1124:1: ( ',' )
            // InternalPattern.g:1125:2: ','
            {
             before(grammarAccess.getPatternComponentAccess().getCommaKeyword_4_1_0()); 
            match(input,30,FOLLOW_2); 
             after(grammarAccess.getPatternComponentAccess().getCommaKeyword_4_1_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__Group_4_1__0__Impl"


    // $ANTLR start "rule__PatternComponent__Group_4_1__1"
    // InternalPattern.g:1134:1: rule__PatternComponent__Group_4_1__1 : rule__PatternComponent__Group_4_1__1__Impl ;
    public final void rule__PatternComponent__Group_4_1__1() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1138:1: ( rule__PatternComponent__Group_4_1__1__Impl )
            // InternalPattern.g:1139:2: rule__PatternComponent__Group_4_1__1__Impl
            {
            pushFollow(FOLLOW_2);
            rule__PatternComponent__Group_4_1__1__Impl();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__Group_4_1__1"


    // $ANTLR start "rule__PatternComponent__Group_4_1__1__Impl"
    // InternalPattern.g:1145:1: rule__PatternComponent__Group_4_1__1__Impl : ( ( rule__PatternComponent__ContentAssignment_4_1_1 ) ) ;
    public final void rule__PatternComponent__Group_4_1__1__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1149:1: ( ( ( rule__PatternComponent__ContentAssignment_4_1_1 ) ) )
            // InternalPattern.g:1150:1: ( ( rule__PatternComponent__ContentAssignment_4_1_1 ) )
            {
            // InternalPattern.g:1150:1: ( ( rule__PatternComponent__ContentAssignment_4_1_1 ) )
            // InternalPattern.g:1151:2: ( rule__PatternComponent__ContentAssignment_4_1_1 )
            {
             before(grammarAccess.getPatternComponentAccess().getContentAssignment_4_1_1()); 
            // InternalPattern.g:1152:2: ( rule__PatternComponent__ContentAssignment_4_1_1 )
            // InternalPattern.g:1152:3: rule__PatternComponent__ContentAssignment_4_1_1
            {
            pushFollow(FOLLOW_2);
            rule__PatternComponent__ContentAssignment_4_1_1();

            state._fsp--;


            }

             after(grammarAccess.getPatternComponentAccess().getContentAssignment_4_1_1()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__Group_4_1__1__Impl"


    // $ANTLR start "rule__PatternComponent__Group_6__0"
    // InternalPattern.g:1161:1: rule__PatternComponent__Group_6__0 : rule__PatternComponent__Group_6__0__Impl rule__PatternComponent__Group_6__1 ;
    public final void rule__PatternComponent__Group_6__0() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1165:1: ( rule__PatternComponent__Group_6__0__Impl rule__PatternComponent__Group_6__1 )
            // InternalPattern.g:1166:2: rule__PatternComponent__Group_6__0__Impl rule__PatternComponent__Group_6__1
            {
            pushFollow(FOLLOW_9);
            rule__PatternComponent__Group_6__0__Impl();

            state._fsp--;

            pushFollow(FOLLOW_2);
            rule__PatternComponent__Group_6__1();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__Group_6__0"


    // $ANTLR start "rule__PatternComponent__Group_6__0__Impl"
    // InternalPattern.g:1173:1: rule__PatternComponent__Group_6__0__Impl : ( '{' ) ;
    public final void rule__PatternComponent__Group_6__0__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1177:1: ( ( '{' ) )
            // InternalPattern.g:1178:1: ( '{' )
            {
            // InternalPattern.g:1178:1: ( '{' )
            // InternalPattern.g:1179:2: '{'
            {
             before(grammarAccess.getPatternComponentAccess().getLeftCurlyBracketKeyword_6_0()); 
            match(input,31,FOLLOW_2); 
             after(grammarAccess.getPatternComponentAccess().getLeftCurlyBracketKeyword_6_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__Group_6__0__Impl"


    // $ANTLR start "rule__PatternComponent__Group_6__1"
    // InternalPattern.g:1188:1: rule__PatternComponent__Group_6__1 : rule__PatternComponent__Group_6__1__Impl rule__PatternComponent__Group_6__2 ;
    public final void rule__PatternComponent__Group_6__1() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1192:1: ( rule__PatternComponent__Group_6__1__Impl rule__PatternComponent__Group_6__2 )
            // InternalPattern.g:1193:2: rule__PatternComponent__Group_6__1__Impl rule__PatternComponent__Group_6__2
            {
            pushFollow(FOLLOW_9);
            rule__PatternComponent__Group_6__1__Impl();

            state._fsp--;

            pushFollow(FOLLOW_2);
            rule__PatternComponent__Group_6__2();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__Group_6__1"


    // $ANTLR start "rule__PatternComponent__Group_6__1__Impl"
    // InternalPattern.g:1200:1: rule__PatternComponent__Group_6__1__Impl : ( ( rule__PatternComponent__Alternatives_6_1 )* ) ;
    public final void rule__PatternComponent__Group_6__1__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1204:1: ( ( ( rule__PatternComponent__Alternatives_6_1 )* ) )
            // InternalPattern.g:1205:1: ( ( rule__PatternComponent__Alternatives_6_1 )* )
            {
            // InternalPattern.g:1205:1: ( ( rule__PatternComponent__Alternatives_6_1 )* )
            // InternalPattern.g:1206:2: ( rule__PatternComponent__Alternatives_6_1 )*
            {
             before(grammarAccess.getPatternComponentAccess().getAlternatives_6_1()); 
            // InternalPattern.g:1207:2: ( rule__PatternComponent__Alternatives_6_1 )*
            loop15:
            do {
                int alt15=2;
                int LA15_0 = input.LA(1);

                if ( (LA15_0==RULE_ID||LA15_0==33) ) {
                    alt15=1;
                }


                switch (alt15) {
            	case 1 :
            	    // InternalPattern.g:1207:3: rule__PatternComponent__Alternatives_6_1
            	    {
            	    pushFollow(FOLLOW_10);
            	    rule__PatternComponent__Alternatives_6_1();

            	    state._fsp--;


            	    }
            	    break;

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

             after(grammarAccess.getPatternComponentAccess().getAlternatives_6_1()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__Group_6__1__Impl"


    // $ANTLR start "rule__PatternComponent__Group_6__2"
    // InternalPattern.g:1215:1: rule__PatternComponent__Group_6__2 : rule__PatternComponent__Group_6__2__Impl ;
    public final void rule__PatternComponent__Group_6__2() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1219:1: ( rule__PatternComponent__Group_6__2__Impl )
            // InternalPattern.g:1220:2: rule__PatternComponent__Group_6__2__Impl
            {
            pushFollow(FOLLOW_2);
            rule__PatternComponent__Group_6__2__Impl();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__Group_6__2"


    // $ANTLR start "rule__PatternComponent__Group_6__2__Impl"
    // InternalPattern.g:1226:1: rule__PatternComponent__Group_6__2__Impl : ( '}' ) ;
    public final void rule__PatternComponent__Group_6__2__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1230:1: ( ( '}' ) )
            // InternalPattern.g:1231:1: ( '}' )
            {
            // InternalPattern.g:1231:1: ( '}' )
            // InternalPattern.g:1232:2: '}'
            {
             before(grammarAccess.getPatternComponentAccess().getRightCurlyBracketKeyword_6_2()); 
            match(input,32,FOLLOW_2); 
             after(grammarAccess.getPatternComponentAccess().getRightCurlyBracketKeyword_6_2()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__Group_6__2__Impl"


    // $ANTLR start "rule__PatternPort__Group__0"
    // InternalPattern.g:1242:1: rule__PatternPort__Group__0 : rule__PatternPort__Group__0__Impl rule__PatternPort__Group__1 ;
    public final void rule__PatternPort__Group__0() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1246:1: ( rule__PatternPort__Group__0__Impl rule__PatternPort__Group__1 )
            // InternalPattern.g:1247:2: rule__PatternPort__Group__0__Impl rule__PatternPort__Group__1
            {
            pushFollow(FOLLOW_3);
            rule__PatternPort__Group__0__Impl();

            state._fsp--;

            pushFollow(FOLLOW_2);
            rule__PatternPort__Group__1();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternPort__Group__0"


    // $ANTLR start "rule__PatternPort__Group__0__Impl"
    // InternalPattern.g:1254:1: rule__PatternPort__Group__0__Impl : ( ( rule__PatternPort__DirAssignment_0 ) ) ;
    public final void rule__PatternPort__Group__0__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1258:1: ( ( ( rule__PatternPort__DirAssignment_0 ) ) )
            // InternalPattern.g:1259:1: ( ( rule__PatternPort__DirAssignment_0 ) )
            {
            // InternalPattern.g:1259:1: ( ( rule__PatternPort__DirAssignment_0 ) )
            // InternalPattern.g:1260:2: ( rule__PatternPort__DirAssignment_0 )
            {
             before(grammarAccess.getPatternPortAccess().getDirAssignment_0()); 
            // InternalPattern.g:1261:2: ( rule__PatternPort__DirAssignment_0 )
            // InternalPattern.g:1261:3: rule__PatternPort__DirAssignment_0
            {
            pushFollow(FOLLOW_2);
            rule__PatternPort__DirAssignment_0();

            state._fsp--;


            }

             after(grammarAccess.getPatternPortAccess().getDirAssignment_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternPort__Group__0__Impl"


    // $ANTLR start "rule__PatternPort__Group__1"
    // InternalPattern.g:1269:1: rule__PatternPort__Group__1 : rule__PatternPort__Group__1__Impl rule__PatternPort__Group__2 ;
    public final void rule__PatternPort__Group__1() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1273:1: ( rule__PatternPort__Group__1__Impl rule__PatternPort__Group__2 )
            // InternalPattern.g:1274:2: rule__PatternPort__Group__1__Impl rule__PatternPort__Group__2
            {
            pushFollow(FOLLOW_16);
            rule__PatternPort__Group__1__Impl();

            state._fsp--;

            pushFollow(FOLLOW_2);
            rule__PatternPort__Group__2();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternPort__Group__1"


    // $ANTLR start "rule__PatternPort__Group__1__Impl"
    // InternalPattern.g:1281:1: rule__PatternPort__Group__1__Impl : ( ( rule__PatternPort__NameAssignment_1 ) ) ;
    public final void rule__PatternPort__Group__1__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1285:1: ( ( ( rule__PatternPort__NameAssignment_1 ) ) )
            // InternalPattern.g:1286:1: ( ( rule__PatternPort__NameAssignment_1 ) )
            {
            // InternalPattern.g:1286:1: ( ( rule__PatternPort__NameAssignment_1 ) )
            // InternalPattern.g:1287:2: ( rule__PatternPort__NameAssignment_1 )
            {
             before(grammarAccess.getPatternPortAccess().getNameAssignment_1()); 
            // InternalPattern.g:1288:2: ( rule__PatternPort__NameAssignment_1 )
            // InternalPattern.g:1288:3: rule__PatternPort__NameAssignment_1
            {
            pushFollow(FOLLOW_2);
            rule__PatternPort__NameAssignment_1();

            state._fsp--;


            }

             after(grammarAccess.getPatternPortAccess().getNameAssignment_1()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternPort__Group__1__Impl"


    // $ANTLR start "rule__PatternPort__Group__2"
    // InternalPattern.g:1296:1: rule__PatternPort__Group__2 : rule__PatternPort__Group__2__Impl ;
    public final void rule__PatternPort__Group__2() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1300:1: ( rule__PatternPort__Group__2__Impl )
            // InternalPattern.g:1301:2: rule__PatternPort__Group__2__Impl
            {
            pushFollow(FOLLOW_2);
            rule__PatternPort__Group__2__Impl();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternPort__Group__2"


    // $ANTLR start "rule__PatternPort__Group__2__Impl"
    // InternalPattern.g:1307:1: rule__PatternPort__Group__2__Impl : ( ( rule__PatternPort__Group_2__0 )? ) ;
    public final void rule__PatternPort__Group__2__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1311:1: ( ( ( rule__PatternPort__Group_2__0 )? ) )
            // InternalPattern.g:1312:1: ( ( rule__PatternPort__Group_2__0 )? )
            {
            // InternalPattern.g:1312:1: ( ( rule__PatternPort__Group_2__0 )? )
            // InternalPattern.g:1313:2: ( rule__PatternPort__Group_2__0 )?
            {
             before(grammarAccess.getPatternPortAccess().getGroup_2()); 
            // InternalPattern.g:1314:2: ( rule__PatternPort__Group_2__0 )?
            int alt16=2;
            int LA16_0 = input.LA(1);

            if ( (LA16_0==34) ) {
                alt16=1;
            }
            switch (alt16) {
                case 1 :
                    // InternalPattern.g:1314:3: rule__PatternPort__Group_2__0
                    {
                    pushFollow(FOLLOW_2);
                    rule__PatternPort__Group_2__0();

                    state._fsp--;


                    }
                    break;

            }

             after(grammarAccess.getPatternPortAccess().getGroup_2()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternPort__Group__2__Impl"


    // $ANTLR start "rule__PatternPort__Group_2__0"
    // InternalPattern.g:1323:1: rule__PatternPort__Group_2__0 : rule__PatternPort__Group_2__0__Impl rule__PatternPort__Group_2__1 ;
    public final void rule__PatternPort__Group_2__0() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1327:1: ( rule__PatternPort__Group_2__0__Impl rule__PatternPort__Group_2__1 )
            // InternalPattern.g:1328:2: rule__PatternPort__Group_2__0__Impl rule__PatternPort__Group_2__1
            {
            pushFollow(FOLLOW_13);
            rule__PatternPort__Group_2__0__Impl();

            state._fsp--;

            pushFollow(FOLLOW_2);
            rule__PatternPort__Group_2__1();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternPort__Group_2__0"


    // $ANTLR start "rule__PatternPort__Group_2__0__Impl"
    // InternalPattern.g:1335:1: rule__PatternPort__Group_2__0__Impl : ( '[' ) ;
    public final void rule__PatternPort__Group_2__0__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1339:1: ( ( '[' ) )
            // InternalPattern.g:1340:1: ( '[' )
            {
            // InternalPattern.g:1340:1: ( '[' )
            // InternalPattern.g:1341:2: '['
            {
             before(grammarAccess.getPatternPortAccess().getLeftSquareBracketKeyword_2_0()); 
            match(input,34,FOLLOW_2); 
             after(grammarAccess.getPatternPortAccess().getLeftSquareBracketKeyword_2_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternPort__Group_2__0__Impl"


    // $ANTLR start "rule__PatternPort__Group_2__1"
    // InternalPattern.g:1350:1: rule__PatternPort__Group_2__1 : rule__PatternPort__Group_2__1__Impl rule__PatternPort__Group_2__2 ;
    public final void rule__PatternPort__Group_2__1() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1354:1: ( rule__PatternPort__Group_2__1__Impl rule__PatternPort__Group_2__2 )
            // InternalPattern.g:1355:2: rule__PatternPort__Group_2__1__Impl rule__PatternPort__Group_2__2
            {
            pushFollow(FOLLOW_14);
            rule__PatternPort__Group_2__1__Impl();

            state._fsp--;

            pushFollow(FOLLOW_2);
            rule__PatternPort__Group_2__2();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternPort__Group_2__1"


    // $ANTLR start "rule__PatternPort__Group_2__1__Impl"
    // InternalPattern.g:1362:1: rule__PatternPort__Group_2__1__Impl : ( ( rule__PatternPort__Alternatives_2_1 ) ) ;
    public final void rule__PatternPort__Group_2__1__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1366:1: ( ( ( rule__PatternPort__Alternatives_2_1 ) ) )
            // InternalPattern.g:1367:1: ( ( rule__PatternPort__Alternatives_2_1 ) )
            {
            // InternalPattern.g:1367:1: ( ( rule__PatternPort__Alternatives_2_1 ) )
            // InternalPattern.g:1368:2: ( rule__PatternPort__Alternatives_2_1 )
            {
             before(grammarAccess.getPatternPortAccess().getAlternatives_2_1()); 
            // InternalPattern.g:1369:2: ( rule__PatternPort__Alternatives_2_1 )
            // InternalPattern.g:1369:3: rule__PatternPort__Alternatives_2_1
            {
            pushFollow(FOLLOW_2);
            rule__PatternPort__Alternatives_2_1();

            state._fsp--;


            }

             after(grammarAccess.getPatternPortAccess().getAlternatives_2_1()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternPort__Group_2__1__Impl"


    // $ANTLR start "rule__PatternPort__Group_2__2"
    // InternalPattern.g:1377:1: rule__PatternPort__Group_2__2 : rule__PatternPort__Group_2__2__Impl ;
    public final void rule__PatternPort__Group_2__2() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1381:1: ( rule__PatternPort__Group_2__2__Impl )
            // InternalPattern.g:1382:2: rule__PatternPort__Group_2__2__Impl
            {
            pushFollow(FOLLOW_2);
            rule__PatternPort__Group_2__2__Impl();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternPort__Group_2__2"


    // $ANTLR start "rule__PatternPort__Group_2__2__Impl"
    // InternalPattern.g:1388:1: rule__PatternPort__Group_2__2__Impl : ( ']' ) ;
    public final void rule__PatternPort__Group_2__2__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1392:1: ( ( ']' ) )
            // InternalPattern.g:1393:1: ( ']' )
            {
            // InternalPattern.g:1393:1: ( ']' )
            // InternalPattern.g:1394:2: ']'
            {
             before(grammarAccess.getPatternPortAccess().getRightSquareBracketKeyword_2_2()); 
            match(input,35,FOLLOW_2); 
             after(grammarAccess.getPatternPortAccess().getRightSquareBracketKeyword_2_2()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternPort__Group_2__2__Impl"


    // $ANTLR start "rule__PatternLink__Group__0"
    // InternalPattern.g:1404:1: rule__PatternLink__Group__0 : rule__PatternLink__Group__0__Impl rule__PatternLink__Group__1 ;
    public final void rule__PatternLink__Group__0() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1408:1: ( rule__PatternLink__Group__0__Impl rule__PatternLink__Group__1 )
            // InternalPattern.g:1409:2: rule__PatternLink__Group__0__Impl rule__PatternLink__Group__1
            {
            pushFollow(FOLLOW_17);
            rule__PatternLink__Group__0__Impl();

            state._fsp--;

            pushFollow(FOLLOW_2);
            rule__PatternLink__Group__1();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternLink__Group__0"


    // $ANTLR start "rule__PatternLink__Group__0__Impl"
    // InternalPattern.g:1416:1: rule__PatternLink__Group__0__Impl : ( ( rule__PatternLink__SrcAssignment_0 ) ) ;
    public final void rule__PatternLink__Group__0__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1420:1: ( ( ( rule__PatternLink__SrcAssignment_0 ) ) )
            // InternalPattern.g:1421:1: ( ( rule__PatternLink__SrcAssignment_0 ) )
            {
            // InternalPattern.g:1421:1: ( ( rule__PatternLink__SrcAssignment_0 ) )
            // InternalPattern.g:1422:2: ( rule__PatternLink__SrcAssignment_0 )
            {
             before(grammarAccess.getPatternLinkAccess().getSrcAssignment_0()); 
            // InternalPattern.g:1423:2: ( rule__PatternLink__SrcAssignment_0 )
            // InternalPattern.g:1423:3: rule__PatternLink__SrcAssignment_0
            {
            pushFollow(FOLLOW_2);
            rule__PatternLink__SrcAssignment_0();

            state._fsp--;


            }

             after(grammarAccess.getPatternLinkAccess().getSrcAssignment_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternLink__Group__0__Impl"


    // $ANTLR start "rule__PatternLink__Group__1"
    // InternalPattern.g:1431:1: rule__PatternLink__Group__1 : rule__PatternLink__Group__1__Impl rule__PatternLink__Group__2 ;
    public final void rule__PatternLink__Group__1() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1435:1: ( rule__PatternLink__Group__1__Impl rule__PatternLink__Group__2 )
            // InternalPattern.g:1436:2: rule__PatternLink__Group__1__Impl rule__PatternLink__Group__2
            {
            pushFollow(FOLLOW_18);
            rule__PatternLink__Group__1__Impl();

            state._fsp--;

            pushFollow(FOLLOW_2);
            rule__PatternLink__Group__2();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternLink__Group__1"


    // $ANTLR start "rule__PatternLink__Group__1__Impl"
    // InternalPattern.g:1443:1: rule__PatternLink__Group__1__Impl : ( '--{' ) ;
    public final void rule__PatternLink__Group__1__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1447:1: ( ( '--{' ) )
            // InternalPattern.g:1448:1: ( '--{' )
            {
            // InternalPattern.g:1448:1: ( '--{' )
            // InternalPattern.g:1449:2: '--{'
            {
             before(grammarAccess.getPatternLinkAccess().getHyphenMinusHyphenMinusLeftCurlyBracketKeyword_1()); 
            match(input,36,FOLLOW_2); 
             after(grammarAccess.getPatternLinkAccess().getHyphenMinusHyphenMinusLeftCurlyBracketKeyword_1()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternLink__Group__1__Impl"


    // $ANTLR start "rule__PatternLink__Group__2"
    // InternalPattern.g:1458:1: rule__PatternLink__Group__2 : rule__PatternLink__Group__2__Impl rule__PatternLink__Group__3 ;
    public final void rule__PatternLink__Group__2() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1462:1: ( rule__PatternLink__Group__2__Impl rule__PatternLink__Group__3 )
            // InternalPattern.g:1463:2: rule__PatternLink__Group__2__Impl rule__PatternLink__Group__3
            {
            pushFollow(FOLLOW_19);
            rule__PatternLink__Group__2__Impl();

            state._fsp--;

            pushFollow(FOLLOW_2);
            rule__PatternLink__Group__3();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternLink__Group__2"


    // $ANTLR start "rule__PatternLink__Group__2__Impl"
    // InternalPattern.g:1470:1: rule__PatternLink__Group__2__Impl : ( ( rule__PatternLink__LinkTypeAssignment_2 ) ) ;
    public final void rule__PatternLink__Group__2__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1474:1: ( ( ( rule__PatternLink__LinkTypeAssignment_2 ) ) )
            // InternalPattern.g:1475:1: ( ( rule__PatternLink__LinkTypeAssignment_2 ) )
            {
            // InternalPattern.g:1475:1: ( ( rule__PatternLink__LinkTypeAssignment_2 ) )
            // InternalPattern.g:1476:2: ( rule__PatternLink__LinkTypeAssignment_2 )
            {
             before(grammarAccess.getPatternLinkAccess().getLinkTypeAssignment_2()); 
            // InternalPattern.g:1477:2: ( rule__PatternLink__LinkTypeAssignment_2 )
            // InternalPattern.g:1477:3: rule__PatternLink__LinkTypeAssignment_2
            {
            pushFollow(FOLLOW_2);
            rule__PatternLink__LinkTypeAssignment_2();

            state._fsp--;


            }

             after(grammarAccess.getPatternLinkAccess().getLinkTypeAssignment_2()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternLink__Group__2__Impl"


    // $ANTLR start "rule__PatternLink__Group__3"
    // InternalPattern.g:1485:1: rule__PatternLink__Group__3 : rule__PatternLink__Group__3__Impl rule__PatternLink__Group__4 ;
    public final void rule__PatternLink__Group__3() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1489:1: ( rule__PatternLink__Group__3__Impl rule__PatternLink__Group__4 )
            // InternalPattern.g:1490:2: rule__PatternLink__Group__3__Impl rule__PatternLink__Group__4
            {
            pushFollow(FOLLOW_20);
            rule__PatternLink__Group__3__Impl();

            state._fsp--;

            pushFollow(FOLLOW_2);
            rule__PatternLink__Group__4();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternLink__Group__3"


    // $ANTLR start "rule__PatternLink__Group__3__Impl"
    // InternalPattern.g:1497:1: rule__PatternLink__Group__3__Impl : ( '}->' ) ;
    public final void rule__PatternLink__Group__3__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1501:1: ( ( '}->' ) )
            // InternalPattern.g:1502:1: ( '}->' )
            {
            // InternalPattern.g:1502:1: ( '}->' )
            // InternalPattern.g:1503:2: '}->'
            {
             before(grammarAccess.getPatternLinkAccess().getRightCurlyBracketHyphenMinusGreaterThanSignKeyword_3()); 
            match(input,37,FOLLOW_2); 
             after(grammarAccess.getPatternLinkAccess().getRightCurlyBracketHyphenMinusGreaterThanSignKeyword_3()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternLink__Group__3__Impl"


    // $ANTLR start "rule__PatternLink__Group__4"
    // InternalPattern.g:1512:1: rule__PatternLink__Group__4 : rule__PatternLink__Group__4__Impl ;
    public final void rule__PatternLink__Group__4() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1516:1: ( rule__PatternLink__Group__4__Impl )
            // InternalPattern.g:1517:2: rule__PatternLink__Group__4__Impl
            {
            pushFollow(FOLLOW_2);
            rule__PatternLink__Group__4__Impl();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternLink__Group__4"


    // $ANTLR start "rule__PatternLink__Group__4__Impl"
    // InternalPattern.g:1523:1: rule__PatternLink__Group__4__Impl : ( ( rule__PatternLink__DstAssignment_4 ) ) ;
    public final void rule__PatternLink__Group__4__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1527:1: ( ( ( rule__PatternLink__DstAssignment_4 ) ) )
            // InternalPattern.g:1528:1: ( ( rule__PatternLink__DstAssignment_4 ) )
            {
            // InternalPattern.g:1528:1: ( ( rule__PatternLink__DstAssignment_4 ) )
            // InternalPattern.g:1529:2: ( rule__PatternLink__DstAssignment_4 )
            {
             before(grammarAccess.getPatternLinkAccess().getDstAssignment_4()); 
            // InternalPattern.g:1530:2: ( rule__PatternLink__DstAssignment_4 )
            // InternalPattern.g:1530:3: rule__PatternLink__DstAssignment_4
            {
            pushFollow(FOLLOW_2);
            rule__PatternLink__DstAssignment_4();

            state._fsp--;


            }

             after(grammarAccess.getPatternLinkAccess().getDstAssignment_4()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternLink__Group__4__Impl"


    // $ANTLR start "rule__QualifiedID__Group__0"
    // InternalPattern.g:1539:1: rule__QualifiedID__Group__0 : rule__QualifiedID__Group__0__Impl rule__QualifiedID__Group__1 ;
    public final void rule__QualifiedID__Group__0() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1543:1: ( rule__QualifiedID__Group__0__Impl rule__QualifiedID__Group__1 )
            // InternalPattern.g:1544:2: rule__QualifiedID__Group__0__Impl rule__QualifiedID__Group__1
            {
            pushFollow(FOLLOW_21);
            rule__QualifiedID__Group__0__Impl();

            state._fsp--;

            pushFollow(FOLLOW_2);
            rule__QualifiedID__Group__1();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__QualifiedID__Group__0"


    // $ANTLR start "rule__QualifiedID__Group__0__Impl"
    // InternalPattern.g:1551:1: rule__QualifiedID__Group__0__Impl : ( RULE_ID ) ;
    public final void rule__QualifiedID__Group__0__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1555:1: ( ( RULE_ID ) )
            // InternalPattern.g:1556:1: ( RULE_ID )
            {
            // InternalPattern.g:1556:1: ( RULE_ID )
            // InternalPattern.g:1557:2: RULE_ID
            {
             before(grammarAccess.getQualifiedIDAccess().getIDTerminalRuleCall_0()); 
            match(input,RULE_ID,FOLLOW_2); 
             after(grammarAccess.getQualifiedIDAccess().getIDTerminalRuleCall_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__QualifiedID__Group__0__Impl"


    // $ANTLR start "rule__QualifiedID__Group__1"
    // InternalPattern.g:1566:1: rule__QualifiedID__Group__1 : rule__QualifiedID__Group__1__Impl ;
    public final void rule__QualifiedID__Group__1() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1570:1: ( rule__QualifiedID__Group__1__Impl )
            // InternalPattern.g:1571:2: rule__QualifiedID__Group__1__Impl
            {
            pushFollow(FOLLOW_2);
            rule__QualifiedID__Group__1__Impl();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__QualifiedID__Group__1"


    // $ANTLR start "rule__QualifiedID__Group__1__Impl"
    // InternalPattern.g:1577:1: rule__QualifiedID__Group__1__Impl : ( ( rule__QualifiedID__Group_1__0 )* ) ;
    public final void rule__QualifiedID__Group__1__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1581:1: ( ( ( rule__QualifiedID__Group_1__0 )* ) )
            // InternalPattern.g:1582:1: ( ( rule__QualifiedID__Group_1__0 )* )
            {
            // InternalPattern.g:1582:1: ( ( rule__QualifiedID__Group_1__0 )* )
            // InternalPattern.g:1583:2: ( rule__QualifiedID__Group_1__0 )*
            {
             before(grammarAccess.getQualifiedIDAccess().getGroup_1()); 
            // InternalPattern.g:1584:2: ( rule__QualifiedID__Group_1__0 )*
            loop17:
            do {
                int alt17=2;
                int LA17_0 = input.LA(1);

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


                switch (alt17) {
            	case 1 :
            	    // InternalPattern.g:1584:3: rule__QualifiedID__Group_1__0
            	    {
            	    pushFollow(FOLLOW_22);
            	    rule__QualifiedID__Group_1__0();

            	    state._fsp--;


            	    }
            	    break;

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

             after(grammarAccess.getQualifiedIDAccess().getGroup_1()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__QualifiedID__Group__1__Impl"


    // $ANTLR start "rule__QualifiedID__Group_1__0"
    // InternalPattern.g:1593:1: rule__QualifiedID__Group_1__0 : rule__QualifiedID__Group_1__0__Impl rule__QualifiedID__Group_1__1 ;
    public final void rule__QualifiedID__Group_1__0() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1597:1: ( rule__QualifiedID__Group_1__0__Impl rule__QualifiedID__Group_1__1 )
            // InternalPattern.g:1598:2: rule__QualifiedID__Group_1__0__Impl rule__QualifiedID__Group_1__1
            {
            pushFollow(FOLLOW_3);
            rule__QualifiedID__Group_1__0__Impl();

            state._fsp--;

            pushFollow(FOLLOW_2);
            rule__QualifiedID__Group_1__1();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__QualifiedID__Group_1__0"


    // $ANTLR start "rule__QualifiedID__Group_1__0__Impl"
    // InternalPattern.g:1605:1: rule__QualifiedID__Group_1__0__Impl : ( '.' ) ;
    public final void rule__QualifiedID__Group_1__0__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1609:1: ( ( '.' ) )
            // InternalPattern.g:1610:1: ( '.' )
            {
            // InternalPattern.g:1610:1: ( '.' )
            // InternalPattern.g:1611:2: '.'
            {
             before(grammarAccess.getQualifiedIDAccess().getFullStopKeyword_1_0()); 
            match(input,38,FOLLOW_2); 
             after(grammarAccess.getQualifiedIDAccess().getFullStopKeyword_1_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__QualifiedID__Group_1__0__Impl"


    // $ANTLR start "rule__QualifiedID__Group_1__1"
    // InternalPattern.g:1620:1: rule__QualifiedID__Group_1__1 : rule__QualifiedID__Group_1__1__Impl ;
    public final void rule__QualifiedID__Group_1__1() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1624:1: ( rule__QualifiedID__Group_1__1__Impl )
            // InternalPattern.g:1625:2: rule__QualifiedID__Group_1__1__Impl
            {
            pushFollow(FOLLOW_2);
            rule__QualifiedID__Group_1__1__Impl();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__QualifiedID__Group_1__1"


    // $ANTLR start "rule__QualifiedID__Group_1__1__Impl"
    // InternalPattern.g:1631:1: rule__QualifiedID__Group_1__1__Impl : ( RULE_ID ) ;
    public final void rule__QualifiedID__Group_1__1__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1635:1: ( ( RULE_ID ) )
            // InternalPattern.g:1636:1: ( RULE_ID )
            {
            // InternalPattern.g:1636:1: ( RULE_ID )
            // InternalPattern.g:1637:2: RULE_ID
            {
             before(grammarAccess.getQualifiedIDAccess().getIDTerminalRuleCall_1_1()); 
            match(input,RULE_ID,FOLLOW_2); 
             after(grammarAccess.getQualifiedIDAccess().getIDTerminalRuleCall_1_1()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__QualifiedID__Group_1__1__Impl"


    // $ANTLR start "rule__Pattern__NameAssignment_1"
    // InternalPattern.g:1647:1: rule__Pattern__NameAssignment_1 : ( RULE_ID ) ;
    public final void rule__Pattern__NameAssignment_1() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1651:1: ( ( RULE_ID ) )
            // InternalPattern.g:1652:2: ( RULE_ID )
            {
            // InternalPattern.g:1652:2: ( RULE_ID )
            // InternalPattern.g:1653:3: RULE_ID
            {
             before(grammarAccess.getPatternAccess().getNameIDTerminalRuleCall_1_0()); 
            match(input,RULE_ID,FOLLOW_2); 
             after(grammarAccess.getPatternAccess().getNameIDTerminalRuleCall_1_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Pattern__NameAssignment_1"


    // $ANTLR start "rule__Pattern__CardinalityElementsAssignment_3_0"
    // InternalPattern.g:1662:1: rule__Pattern__CardinalityElementsAssignment_3_0 : ( ruleCardinalityElement ) ;
    public final void rule__Pattern__CardinalityElementsAssignment_3_0() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1666:1: ( ( ruleCardinalityElement ) )
            // InternalPattern.g:1667:2: ( ruleCardinalityElement )
            {
            // InternalPattern.g:1667:2: ( ruleCardinalityElement )
            // InternalPattern.g:1668:3: ruleCardinalityElement
            {
             before(grammarAccess.getPatternAccess().getCardinalityElementsCardinalityElementParserRuleCall_3_0_0()); 
            pushFollow(FOLLOW_2);
            ruleCardinalityElement();

            state._fsp--;

             after(grammarAccess.getPatternAccess().getCardinalityElementsCardinalityElementParserRuleCall_3_0_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Pattern__CardinalityElementsAssignment_3_0"


    // $ANTLR start "rule__Pattern__CardinalityElementsAssignment_3_1_1"
    // InternalPattern.g:1677:1: rule__Pattern__CardinalityElementsAssignment_3_1_1 : ( ruleCardinalityElement ) ;
    public final void rule__Pattern__CardinalityElementsAssignment_3_1_1() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1681:1: ( ( ruleCardinalityElement ) )
            // InternalPattern.g:1682:2: ( ruleCardinalityElement )
            {
            // InternalPattern.g:1682:2: ( ruleCardinalityElement )
            // InternalPattern.g:1683:3: ruleCardinalityElement
            {
             before(grammarAccess.getPatternAccess().getCardinalityElementsCardinalityElementParserRuleCall_3_1_1_0()); 
            pushFollow(FOLLOW_2);
            ruleCardinalityElement();

            state._fsp--;

             after(grammarAccess.getPatternAccess().getCardinalityElementsCardinalityElementParserRuleCall_3_1_1_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Pattern__CardinalityElementsAssignment_3_1_1"


    // $ANTLR start "rule__Pattern__ModelElementsAssignment_5_1_0"
    // InternalPattern.g:1692:1: rule__Pattern__ModelElementsAssignment_5_1_0 : ( rulePatternComponent ) ;
    public final void rule__Pattern__ModelElementsAssignment_5_1_0() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1696:1: ( ( rulePatternComponent ) )
            // InternalPattern.g:1697:2: ( rulePatternComponent )
            {
            // InternalPattern.g:1697:2: ( rulePatternComponent )
            // InternalPattern.g:1698:3: rulePatternComponent
            {
             before(grammarAccess.getPatternAccess().getModelElementsPatternComponentParserRuleCall_5_1_0_0()); 
            pushFollow(FOLLOW_2);
            rulePatternComponent();

            state._fsp--;

             after(grammarAccess.getPatternAccess().getModelElementsPatternComponentParserRuleCall_5_1_0_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Pattern__ModelElementsAssignment_5_1_0"


    // $ANTLR start "rule__Pattern__ModelElementsAssignment_5_1_1"
    // InternalPattern.g:1707:1: rule__Pattern__ModelElementsAssignment_5_1_1 : ( rulePatternLink ) ;
    public final void rule__Pattern__ModelElementsAssignment_5_1_1() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1711:1: ( ( rulePatternLink ) )
            // InternalPattern.g:1712:2: ( rulePatternLink )
            {
            // InternalPattern.g:1712:2: ( rulePatternLink )
            // InternalPattern.g:1713:3: rulePatternLink
            {
             before(grammarAccess.getPatternAccess().getModelElementsPatternLinkParserRuleCall_5_1_1_0()); 
            pushFollow(FOLLOW_2);
            rulePatternLink();

            state._fsp--;

             after(grammarAccess.getPatternAccess().getModelElementsPatternLinkParserRuleCall_5_1_1_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Pattern__ModelElementsAssignment_5_1_1"


    // $ANTLR start "rule__PatternComponent__NameAssignment_1"
    // InternalPattern.g:1722:1: rule__PatternComponent__NameAssignment_1 : ( RULE_ID ) ;
    public final void rule__PatternComponent__NameAssignment_1() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1726:1: ( ( RULE_ID ) )
            // InternalPattern.g:1727:2: ( RULE_ID )
            {
            // InternalPattern.g:1727:2: ( RULE_ID )
            // InternalPattern.g:1728:3: RULE_ID
            {
             before(grammarAccess.getPatternComponentAccess().getNameIDTerminalRuleCall_1_0()); 
            match(input,RULE_ID,FOLLOW_2); 
             after(grammarAccess.getPatternComponentAccess().getNameIDTerminalRuleCall_1_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__NameAssignment_1"


    // $ANTLR start "rule__PatternComponent__MultiplicityValueAssignment_2_1_0"
    // InternalPattern.g:1737:1: rule__PatternComponent__MultiplicityValueAssignment_2_1_0 : ( RULE_INT ) ;
    public final void rule__PatternComponent__MultiplicityValueAssignment_2_1_0() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1741:1: ( ( RULE_INT ) )
            // InternalPattern.g:1742:2: ( RULE_INT )
            {
            // InternalPattern.g:1742:2: ( RULE_INT )
            // InternalPattern.g:1743:3: RULE_INT
            {
             before(grammarAccess.getPatternComponentAccess().getMultiplicityValueINTTerminalRuleCall_2_1_0_0()); 
            match(input,RULE_INT,FOLLOW_2); 
             after(grammarAccess.getPatternComponentAccess().getMultiplicityValueINTTerminalRuleCall_2_1_0_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__MultiplicityValueAssignment_2_1_0"


    // $ANTLR start "rule__PatternComponent__CardinalityElementAssignment_2_1_1"
    // InternalPattern.g:1752:1: rule__PatternComponent__CardinalityElementAssignment_2_1_1 : ( ( RULE_ID ) ) ;
    public final void rule__PatternComponent__CardinalityElementAssignment_2_1_1() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1756:1: ( ( ( RULE_ID ) ) )
            // InternalPattern.g:1757:2: ( ( RULE_ID ) )
            {
            // InternalPattern.g:1757:2: ( ( RULE_ID ) )
            // InternalPattern.g:1758:3: ( RULE_ID )
            {
             before(grammarAccess.getPatternComponentAccess().getCardinalityElementCardinalityElementCrossReference_2_1_1_0()); 
            // InternalPattern.g:1759:3: ( RULE_ID )
            // InternalPattern.g:1760:4: RULE_ID
            {
             before(grammarAccess.getPatternComponentAccess().getCardinalityElementCardinalityElementIDTerminalRuleCall_2_1_1_0_1()); 
            match(input,RULE_ID,FOLLOW_2); 
             after(grammarAccess.getPatternComponentAccess().getCardinalityElementCardinalityElementIDTerminalRuleCall_2_1_1_0_1()); 

            }

             after(grammarAccess.getPatternComponentAccess().getCardinalityElementCardinalityElementCrossReference_2_1_1_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__CardinalityElementAssignment_2_1_1"


    // $ANTLR start "rule__PatternComponent__ContentAssignment_4_0"
    // InternalPattern.g:1771:1: rule__PatternComponent__ContentAssignment_4_0 : ( rulePatternPort ) ;
    public final void rule__PatternComponent__ContentAssignment_4_0() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1775:1: ( ( rulePatternPort ) )
            // InternalPattern.g:1776:2: ( rulePatternPort )
            {
            // InternalPattern.g:1776:2: ( rulePatternPort )
            // InternalPattern.g:1777:3: rulePatternPort
            {
             before(grammarAccess.getPatternComponentAccess().getContentPatternPortParserRuleCall_4_0_0()); 
            pushFollow(FOLLOW_2);
            rulePatternPort();

            state._fsp--;

             after(grammarAccess.getPatternComponentAccess().getContentPatternPortParserRuleCall_4_0_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__ContentAssignment_4_0"


    // $ANTLR start "rule__PatternComponent__ContentAssignment_4_1_1"
    // InternalPattern.g:1786:1: rule__PatternComponent__ContentAssignment_4_1_1 : ( rulePatternPort ) ;
    public final void rule__PatternComponent__ContentAssignment_4_1_1() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1790:1: ( ( rulePatternPort ) )
            // InternalPattern.g:1791:2: ( rulePatternPort )
            {
            // InternalPattern.g:1791:2: ( rulePatternPort )
            // InternalPattern.g:1792:3: rulePatternPort
            {
             before(grammarAccess.getPatternComponentAccess().getContentPatternPortParserRuleCall_4_1_1_0()); 
            pushFollow(FOLLOW_2);
            rulePatternPort();

            state._fsp--;

             after(grammarAccess.getPatternComponentAccess().getContentPatternPortParserRuleCall_4_1_1_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__ContentAssignment_4_1_1"


    // $ANTLR start "rule__PatternComponent__ContentAssignment_6_1_0"
    // InternalPattern.g:1801:1: rule__PatternComponent__ContentAssignment_6_1_0 : ( rulePatternComponent ) ;
    public final void rule__PatternComponent__ContentAssignment_6_1_0() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1805:1: ( ( rulePatternComponent ) )
            // InternalPattern.g:1806:2: ( rulePatternComponent )
            {
            // InternalPattern.g:1806:2: ( rulePatternComponent )
            // InternalPattern.g:1807:3: rulePatternComponent
            {
             before(grammarAccess.getPatternComponentAccess().getContentPatternComponentParserRuleCall_6_1_0_0()); 
            pushFollow(FOLLOW_2);
            rulePatternComponent();

            state._fsp--;

             after(grammarAccess.getPatternComponentAccess().getContentPatternComponentParserRuleCall_6_1_0_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__ContentAssignment_6_1_0"


    // $ANTLR start "rule__PatternComponent__ContentAssignment_6_1_1"
    // InternalPattern.g:1816:1: rule__PatternComponent__ContentAssignment_6_1_1 : ( rulePatternLink ) ;
    public final void rule__PatternComponent__ContentAssignment_6_1_1() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1820:1: ( ( rulePatternLink ) )
            // InternalPattern.g:1821:2: ( rulePatternLink )
            {
            // InternalPattern.g:1821:2: ( rulePatternLink )
            // InternalPattern.g:1822:3: rulePatternLink
            {
             before(grammarAccess.getPatternComponentAccess().getContentPatternLinkParserRuleCall_6_1_1_0()); 
            pushFollow(FOLLOW_2);
            rulePatternLink();

            state._fsp--;

             after(grammarAccess.getPatternComponentAccess().getContentPatternLinkParserRuleCall_6_1_1_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternComponent__ContentAssignment_6_1_1"


    // $ANTLR start "rule__PatternPort__DirAssignment_0"
    // InternalPattern.g:1831:1: rule__PatternPort__DirAssignment_0 : ( rulePatternPortDirection ) ;
    public final void rule__PatternPort__DirAssignment_0() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1835:1: ( ( rulePatternPortDirection ) )
            // InternalPattern.g:1836:2: ( rulePatternPortDirection )
            {
            // InternalPattern.g:1836:2: ( rulePatternPortDirection )
            // InternalPattern.g:1837:3: rulePatternPortDirection
            {
             before(grammarAccess.getPatternPortAccess().getDirPatternPortDirectionEnumRuleCall_0_0()); 
            pushFollow(FOLLOW_2);
            rulePatternPortDirection();

            state._fsp--;

             after(grammarAccess.getPatternPortAccess().getDirPatternPortDirectionEnumRuleCall_0_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternPort__DirAssignment_0"


    // $ANTLR start "rule__PatternPort__NameAssignment_1"
    // InternalPattern.g:1846:1: rule__PatternPort__NameAssignment_1 : ( RULE_ID ) ;
    public final void rule__PatternPort__NameAssignment_1() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1850:1: ( ( RULE_ID ) )
            // InternalPattern.g:1851:2: ( RULE_ID )
            {
            // InternalPattern.g:1851:2: ( RULE_ID )
            // InternalPattern.g:1852:3: RULE_ID
            {
             before(grammarAccess.getPatternPortAccess().getNameIDTerminalRuleCall_1_0()); 
            match(input,RULE_ID,FOLLOW_2); 
             after(grammarAccess.getPatternPortAccess().getNameIDTerminalRuleCall_1_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternPort__NameAssignment_1"


    // $ANTLR start "rule__PatternPort__MultiplicityValueAssignment_2_1_0"
    // InternalPattern.g:1861:1: rule__PatternPort__MultiplicityValueAssignment_2_1_0 : ( RULE_INT ) ;
    public final void rule__PatternPort__MultiplicityValueAssignment_2_1_0() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1865:1: ( ( RULE_INT ) )
            // InternalPattern.g:1866:2: ( RULE_INT )
            {
            // InternalPattern.g:1866:2: ( RULE_INT )
            // InternalPattern.g:1867:3: RULE_INT
            {
             before(grammarAccess.getPatternPortAccess().getMultiplicityValueINTTerminalRuleCall_2_1_0_0()); 
            match(input,RULE_INT,FOLLOW_2); 
             after(grammarAccess.getPatternPortAccess().getMultiplicityValueINTTerminalRuleCall_2_1_0_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternPort__MultiplicityValueAssignment_2_1_0"


    // $ANTLR start "rule__PatternPort__CardinalityElementAssignment_2_1_1"
    // InternalPattern.g:1876:1: rule__PatternPort__CardinalityElementAssignment_2_1_1 : ( ( RULE_ID ) ) ;
    public final void rule__PatternPort__CardinalityElementAssignment_2_1_1() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1880:1: ( ( ( RULE_ID ) ) )
            // InternalPattern.g:1881:2: ( ( RULE_ID ) )
            {
            // InternalPattern.g:1881:2: ( ( RULE_ID ) )
            // InternalPattern.g:1882:3: ( RULE_ID )
            {
             before(grammarAccess.getPatternPortAccess().getCardinalityElementCardinalityElementCrossReference_2_1_1_0()); 
            // InternalPattern.g:1883:3: ( RULE_ID )
            // InternalPattern.g:1884:4: RULE_ID
            {
             before(grammarAccess.getPatternPortAccess().getCardinalityElementCardinalityElementIDTerminalRuleCall_2_1_1_0_1()); 
            match(input,RULE_ID,FOLLOW_2); 
             after(grammarAccess.getPatternPortAccess().getCardinalityElementCardinalityElementIDTerminalRuleCall_2_1_1_0_1()); 

            }

             after(grammarAccess.getPatternPortAccess().getCardinalityElementCardinalityElementCrossReference_2_1_1_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternPort__CardinalityElementAssignment_2_1_1"


    // $ANTLR start "rule__CardinalityElement__NameAssignment"
    // InternalPattern.g:1895:1: rule__CardinalityElement__NameAssignment : ( RULE_ID ) ;
    public final void rule__CardinalityElement__NameAssignment() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1899:1: ( ( RULE_ID ) )
            // InternalPattern.g:1900:2: ( RULE_ID )
            {
            // InternalPattern.g:1900:2: ( RULE_ID )
            // InternalPattern.g:1901:3: RULE_ID
            {
             before(grammarAccess.getCardinalityElementAccess().getNameIDTerminalRuleCall_0()); 
            match(input,RULE_ID,FOLLOW_2); 
             after(grammarAccess.getCardinalityElementAccess().getNameIDTerminalRuleCall_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__CardinalityElement__NameAssignment"


    // $ANTLR start "rule__PatternLink__SrcAssignment_0"
    // InternalPattern.g:1910:1: rule__PatternLink__SrcAssignment_0 : ( ( ruleQualifiedID ) ) ;
    public final void rule__PatternLink__SrcAssignment_0() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1914:1: ( ( ( ruleQualifiedID ) ) )
            // InternalPattern.g:1915:2: ( ( ruleQualifiedID ) )
            {
            // InternalPattern.g:1915:2: ( ( ruleQualifiedID ) )
            // InternalPattern.g:1916:3: ( ruleQualifiedID )
            {
             before(grammarAccess.getPatternLinkAccess().getSrcPatternPortCrossReference_0_0()); 
            // InternalPattern.g:1917:3: ( ruleQualifiedID )
            // InternalPattern.g:1918:4: ruleQualifiedID
            {
             before(grammarAccess.getPatternLinkAccess().getSrcPatternPortQualifiedIDParserRuleCall_0_0_1()); 
            pushFollow(FOLLOW_2);
            ruleQualifiedID();

            state._fsp--;

             after(grammarAccess.getPatternLinkAccess().getSrcPatternPortQualifiedIDParserRuleCall_0_0_1()); 

            }

             after(grammarAccess.getPatternLinkAccess().getSrcPatternPortCrossReference_0_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternLink__SrcAssignment_0"


    // $ANTLR start "rule__PatternLink__LinkTypeAssignment_2"
    // InternalPattern.g:1929:1: rule__PatternLink__LinkTypeAssignment_2 : ( ruleLinkType ) ;
    public final void rule__PatternLink__LinkTypeAssignment_2() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1933:1: ( ( ruleLinkType ) )
            // InternalPattern.g:1934:2: ( ruleLinkType )
            {
            // InternalPattern.g:1934:2: ( ruleLinkType )
            // InternalPattern.g:1935:3: ruleLinkType
            {
             before(grammarAccess.getPatternLinkAccess().getLinkTypeLinkTypeEnumRuleCall_2_0()); 
            pushFollow(FOLLOW_2);
            ruleLinkType();

            state._fsp--;

             after(grammarAccess.getPatternLinkAccess().getLinkTypeLinkTypeEnumRuleCall_2_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternLink__LinkTypeAssignment_2"


    // $ANTLR start "rule__PatternLink__DstAssignment_4"
    // InternalPattern.g:1944:1: rule__PatternLink__DstAssignment_4 : ( ( ruleQualifiedID ) ) ;
    public final void rule__PatternLink__DstAssignment_4() throws RecognitionException {

        		int stackSize = keepStackSize();
        	
        try {
            // InternalPattern.g:1948:1: ( ( ( ruleQualifiedID ) ) )
            // InternalPattern.g:1949:2: ( ( ruleQualifiedID ) )
            {
            // InternalPattern.g:1949:2: ( ( ruleQualifiedID ) )
            // InternalPattern.g:1950:3: ( ruleQualifiedID )
            {
             before(grammarAccess.getPatternLinkAccess().getDstPatternPortCrossReference_4_0()); 
            // InternalPattern.g:1951:3: ( ruleQualifiedID )
            // InternalPattern.g:1952:4: ruleQualifiedID
            {
             before(grammarAccess.getPatternLinkAccess().getDstPatternPortQualifiedIDParserRuleCall_4_0_1()); 
            pushFollow(FOLLOW_2);
            ruleQualifiedID();

            state._fsp--;

             after(grammarAccess.getPatternLinkAccess().getDstPatternPortQualifiedIDParserRuleCall_4_0_1()); 

            }

             after(grammarAccess.getPatternLinkAccess().getDstPatternPortCrossReference_4_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternLink__DstAssignment_4"

    // Delegated rules


 

    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[]{0x0000000000000010L});
    public static final BitSet FOLLOW_4 = new BitSet(new long[]{0x0000000010000000L});
    public static final BitSet FOLLOW_5 = new BitSet(new long[]{0x0000000020000010L});
    public static final BitSet FOLLOW_6 = new BitSet(new long[]{0x0000000080000000L});
    public static final BitSet FOLLOW_7 = new BitSet(new long[]{0x0000000040000000L});
    public static final BitSet FOLLOW_8 = new BitSet(new long[]{0x0000000040000002L});
    public static final BitSet FOLLOW_9 = new BitSet(new long[]{0x0000000300000010L});
    public static final BitSet FOLLOW_10 = new BitSet(new long[]{0x0000000200000012L});
    public static final BitSet FOLLOW_11 = new BitSet(new long[]{0x0000000410000000L});
    public static final BitSet FOLLOW_12 = new BitSet(new long[]{0x0000000020007800L});
    public static final BitSet FOLLOW_13 = new BitSet(new long[]{0x0000000000000030L});
    public static final BitSet FOLLOW_14 = new BitSet(new long[]{0x0000000800000000L});
    public static final BitSet FOLLOW_15 = new BitSet(new long[]{0x0000000000007800L});
    public static final BitSet FOLLOW_16 = new BitSet(new long[]{0x0000000400000000L});
    public static final BitSet FOLLOW_17 = new BitSet(new long[]{0x0000001000000000L});
    public static final BitSet FOLLOW_18 = new BitSet(new long[]{0x0000000007FF8000L});
    public static final BitSet FOLLOW_19 = new BitSet(new long[]{0x0000002000000000L});
    public static final BitSet FOLLOW_20 = new BitSet(new long[]{0x0000000200000010L});
    public static final BitSet FOLLOW_21 = new BitSet(new long[]{0x0000004000000000L});
    public static final BitSet FOLLOW_22 = new BitSet(new long[]{0x0000004000000002L});

}