docs: public final void mCOMMENT() throws RecognitionException {
          try {
              int _type = COMMENT;
              int _channel = DEFAULT_TOKEN_CHANNEL;
              // com/dyuproject/protostuff/parser/ProtoLexer.g:260:5: ( '//' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' | '/*' ( options {greedy=false; } : . )* '*/' )
              int alt16=2;
              switch ( input.LA(1) ) {
              case '/':
                  {
                  switch ( input.LA(2) ) {
                  case '/':
                      {
                      alt16=1;
                      }
                      break;
                  case '*':
                      {
                      alt16=2;
                      }
                      break;
                  default:
                      NoViableAltException nvae =
                          new NoViableAltException("", 16, 1, input);
  
                      throw nvae;
                  }
  
                  }
                  break;
              default:
                  NoViableAltException nvae =
                      new NoViableAltException("", 16, 0, input);
  
                  throw nvae;
              }
  
              switch (alt16) {
                  case 1 :
                      // com/dyuproject/protostuff/parser/ProtoLexer.g:260:9: '//' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n'
                      {
                      match("//"); 
  
                      // com/dyuproject/protostuff/parser/ProtoLexer.g:260:14: (~ ( '\\n' | '\\r' ) )*
                      loop13:
                      do {
                          int alt13=2;
                          int LA13_0 = input.LA(1);
  
                          if ( ((LA13_0>='\u0000' && LA13_0<='\t')||(LA13_0>='\u000B' && LA13_0<='\f')||(LA13_0>='\u000E' && LA13_0<='\uFFFF')) ) {
                              alt13=1;
                          }
  
  
                          switch (alt13) {
                      	case 1 :
                      	    // com/dyuproject/protostuff/parser/ProtoLexer.g:260:14: ~ ( '\\n' | '\\r' )
                      	    {
                      	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='\t')||(input.LA(1)>='\u000B' && input.LA(1)<='\f')||(input.LA(1)>='\u000E' && input.LA(1)<='\uFFFF') ) {
                      	        input.consume();
  
                      	    }
                      	    else {
                      	        MismatchedSetException mse = new MismatchedSetException(null,input);
                      	        recover(mse);
                      	        throw mse;}
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop13;
                          }
                      } while (true);
  
                      // com/dyuproject/protostuff/parser/ProtoLexer.g:260:28: ( '\\r' )?
                      int alt14=2;
                      switch ( input.LA(1) ) {
                          case '\r':
                              {
                              alt14=1;
                              }
                              break;
                      }
  
                      switch (alt14) {
                          case 1 :
                              // com/dyuproject/protostuff/parser/ProtoLexer.g:260:28: '\\r'
                              {
                              match('\r'); 
  
                              }
                              break;
  
                      }
  
                      match('\n'); 
                      skip();
  
                      }
                      break;
                  case 2 :
                      // com/dyuproject/protostuff/parser/ProtoLexer.g:261:9: '/*' ( options {greedy=false; } : . )* '*/'
                      {
                      match("/*"); 
  
                      // com/dyuproject/protostuff/parser/ProtoLexer.g:261:14: ( options {greedy=false; } : . )*
                      loop15:
                      do {
                          int alt15=2;
                          int LA15_0 = input.LA(1);
  
                          if ( (LA15_0=='*') ) {
                              int LA15_1 = input.LA(2);
  
                              if ( (LA15_1=='/') ) {
                                  alt15=2;
                              }
                              else if ( ((LA15_1>='\u0000' && LA15_1<='.')||(LA15_1>='0' && LA15_1<='\uFFFF')) ) {
                                  alt15=1;
                              }
  
  
                          }
                          else if ( ((LA15_0>='\u0000' && LA15_0<=')')||(LA15_0>='+' && LA15_0<='\uFFFF')) ) {
                              alt15=1;
                          }
  
  
                          switch (alt15) {
                      	case 1 :
                      	    // com/dyuproject/protostuff/parser/ProtoLexer.g:261:42: .
                      	    {
                      	    matchAny(); 
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop15;
                          }
                      } while (true);
  
                      match("*/"); 
  
                      skip();
  
                      }
                      break;
  
              }
              state.type = _type;
              state.channel = _channel;
          }
          finally {
          }
      }