public final AntlrDatatypeRuleToken ruleFQN() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token this_ID_0=null;
        Token kw=null;
        Token this_ID_2=null;

         enterRule(); 
            
        try {
            // InternalSimpleExpressions.g:772:28: ( (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* ) )
            // InternalSimpleExpressions.g:773:1: (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* )
            {
            // InternalSimpleExpressions.g:773:1: (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* )
            // InternalSimpleExpressions.g:773:6: this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )*
            {
            this_ID_0=(Token)match(input,RULE_ID,FOLLOW_15); 

            		current.merge(this_ID_0);
                
             
                newLeafNode(this_ID_0, grammarAccess.getFQNAccess().getIDTerminalRuleCall_0()); 
                
            // InternalSimpleExpressions.g:780:1: (kw= '.' this_ID_2= RULE_ID )*
            loop14:
            do {
                int alt14=2;
                int LA14_0 = input.LA(1);

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


                switch (alt14) {
            	case 1 :
            	    // InternalSimpleExpressions.g:781:2: kw= '.' this_ID_2= RULE_ID
            	    {
            	    kw=(Token)match(input,25,FOLLOW_16); 

            	            current.merge(kw);
            	            newLeafNode(kw, grammarAccess.getFQNAccess().getFullStopKeyword_1_0()); 
            	        
            	    this_ID_2=(Token)match(input,RULE_ID,FOLLOW_15); 

            	    		current.merge(this_ID_2);
            	        
            	     
            	        newLeafNode(this_ID_2, grammarAccess.getFQNAccess().getIDTerminalRuleCall_1_1()); 
            	        

            	    }
            	    break;

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


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
public final AntlrDatatypeRuleToken ruleFQN ( ) throws RecognitionException { AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken ( ) ; Token this_ID_0 = null ; Token kw = null ; Token this_ID_2 = null ; enterRule ( ) ; try { { { this_ID_0 = ( Token ) match ( input , RULE_ID , FOLLOW_15 ) ; current . merge ( this_ID_0 ) ; newLeafNode ( this_ID_0 , grammarAccess . getFQNAccess ( ) . getIDTerminalRuleCall_0 ( ) ) ; loop14 : do { int alt14 = 2 ; int LA14_0 = input . LA ( 1 ) ; if ( ( LA14_0 == 25 ) ) { alt14 = 1 ; } switch ( alt14 ) { case 1 : { kw = ( Token ) match ( input , 25 , FOLLOW_16 ) ; current . merge ( kw ) ; newLeafNode ( kw , grammarAccess . getFQNAccess ( ) . getFullStopKeyword_1_0 ( ) ) ; this_ID_2 = ( Token ) match ( input , RULE_ID , FOLLOW_15 ) ; current . merge ( this_ID_2 ) ; newLeafNode ( this_ID_2 , grammarAccess . getFQNAccess ( ) . getIDTerminalRuleCall_1_1 ( ) ) ; } break ; default : break loop14 ; } } while ( true ) ; } } leaveRule ( ) ; } catch ( RecognitionException re ) { recover ( input , re ) ; appendSkippedTokens ( ) ; } finally { } return current ; }
InternalSimpleExpressions.g:769:1: ruleFQN returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* ) ;